mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-06-30 11:22:53 +01:00
merge common implementations and server implementations
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace SharpCifs.Util.Sharpen
|
||||
{
|
||||
public class OutputStream : IDisposable
|
||||
{
|
||||
protected Stream Wrapped;
|
||||
|
||||
public static implicit operator OutputStream (Stream s)
|
||||
{
|
||||
return Wrap (s);
|
||||
}
|
||||
|
||||
public static implicit operator Stream (OutputStream s)
|
||||
{
|
||||
return s.GetWrappedStream ();
|
||||
}
|
||||
|
||||
public virtual void Close ()
|
||||
{
|
||||
if (Wrapped != null) {
|
||||
//Stream.`Close` method deleted
|
||||
//Wrapped.Close ();
|
||||
Wrapped.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose ()
|
||||
{
|
||||
Close ();
|
||||
}
|
||||
|
||||
public virtual void Flush ()
|
||||
{
|
||||
if (Wrapped != null) {
|
||||
Wrapped.Flush ();
|
||||
}
|
||||
}
|
||||
|
||||
internal Stream GetWrappedStream ()
|
||||
{
|
||||
// Always create a wrapper stream (not directly Wrapped) since the subclass
|
||||
// may be overriding methods that need to be called when used through the Stream class
|
||||
return new WrappedSystemStream (this);
|
||||
}
|
||||
|
||||
static internal OutputStream Wrap (Stream s)
|
||||
{
|
||||
OutputStream stream = new OutputStream ();
|
||||
stream.Wrapped = s;
|
||||
return stream;
|
||||
}
|
||||
|
||||
public virtual void Write (int b)
|
||||
{
|
||||
if (Wrapped is WrappedSystemStream)
|
||||
((WrappedSystemStream)Wrapped).OutputStream.Write (b);
|
||||
else {
|
||||
if (Wrapped == null)
|
||||
throw new NotImplementedException ();
|
||||
Wrapped.WriteByte ((byte)b);
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void Write (byte[] b)
|
||||
{
|
||||
Write (b, 0, b.Length);
|
||||
}
|
||||
|
||||
public virtual void Write (byte[] b, int offset, int len)
|
||||
{
|
||||
if (Wrapped is WrappedSystemStream)
|
||||
((WrappedSystemStream)Wrapped).OutputStream.Write (b, offset, len);
|
||||
else {
|
||||
if (Wrapped != null) {
|
||||
Wrapped.Write (b, offset, len);
|
||||
} else {
|
||||
for (int i = 0; i < len; i++) {
|
||||
Write (b[i + offset]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user