| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 | using System;using System.IO;namespace SharpCifs.Util.Sharpen{    public class InputStream : IDisposable	{		private long _mark;		protected Stream Wrapped;		protected Stream BaseStream;		public static implicit operator InputStream (Stream s)		{			return Wrap (s);		}		public static implicit operator Stream (InputStream s)		{			return s.GetWrappedStream ();		}		public virtual int Available ()		{		    if (Wrapped is WrappedSystemStream)				return ((WrappedSystemStream)Wrapped).InputStream.Available ();		    return 0;		}	    public virtual void Close ()		{			if (Wrapped != null) {                //Stream.`Close` method deleted				//Wrapped.Close ();                Wrapped.Dispose();            }		}		public void Dispose ()		{			Close ();		}        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);		}		public virtual void Mark (int readlimit)		{			if (Wrapped is WrappedSystemStream)				((WrappedSystemStream)Wrapped).InputStream.Mark (readlimit);			else {				if (BaseStream is WrappedSystemStream)					((WrappedSystemStream)BaseStream).OnMark (readlimit);				if (Wrapped != null)					_mark = Wrapped.Position;			}		}				public virtual bool MarkSupported ()		{		    if (Wrapped is WrappedSystemStream)				return ((WrappedSystemStream)Wrapped).InputStream.MarkSupported ();		    return ((Wrapped != null) && Wrapped.CanSeek);		}	    public virtual int Read ()		{			if (Wrapped == null) {				throw new NotImplementedException ();			}			return Wrapped.ReadByte ();		}		public virtual int Read (byte[] buf)		{			return Read (buf, 0, buf.Length);		}		public virtual int Read (byte[] b, int off, int len)		{			if (Wrapped is WrappedSystemStream)				return ((WrappedSystemStream)Wrapped).InputStream.Read (b, off, len);						if (Wrapped != null) {				int num = Wrapped.Read (b, off, len);				return ((num <= 0) ? -1 : num);			}			int totalRead = 0;			while (totalRead < len) {				int nr = Read ();				if (nr == -1)					return -1;				b[off + totalRead] = (byte)nr;				totalRead++;			}			return totalRead;		}		public virtual void Reset ()		{			if (Wrapped is WrappedSystemStream)				((WrappedSystemStream)Wrapped).InputStream.Reset ();			else {				if (Wrapped == null)					throw new IOException ();				Wrapped.Position = _mark;			}		}		public virtual long Skip (long cnt)		{			if (Wrapped is WrappedSystemStream)				return ((WrappedSystemStream)Wrapped).InputStream.Skip (cnt);						long n = cnt;			while (n > 0) {				if (Read () == -1)					return cnt - n;				n--;			}			return cnt - n;		}				internal virtual bool CanSeek ()		{		    if (Wrapped != null)				return Wrapped.CanSeek;		    return false;		}	    internal virtual long Position {			get			{			    if (Wrapped != null)					return Wrapped.Position;			    throw new NotSupportedException ();			}	        set {				if (Wrapped != null)					Wrapped.Position = value;				else					throw new NotSupportedException ();			}		}        public virtual long Length        {            get            {                if (Wrapped != null)                {                    return Wrapped.Length;                    }                throw new NotSupportedException();            }        }		static internal InputStream Wrap (Stream s)		{			InputStream stream = new InputStream ();			stream.Wrapped = s;			return stream;		}	}}
 |