misc/libphysfs/lzma/CS/7zip/Common/InBuffer.cs
changeset 13904 99b265e0d1d0
parent 13903 5f819b90d479
child 13905 b172a5d40eee
equal deleted inserted replaced
13903:5f819b90d479 13904:99b265e0d1d0
     1 // InBuffer.cs
       
     2 
       
     3 namespace SevenZip.Buffer
       
     4 {
       
     5 	public class InBuffer
       
     6 	{
       
     7 		byte[] m_Buffer;
       
     8 		uint m_Pos;
       
     9 		uint m_Limit;
       
    10 		uint m_BufferSize;
       
    11 		System.IO.Stream m_Stream;
       
    12 		bool m_StreamWasExhausted;
       
    13 		ulong m_ProcessedSize;
       
    14 
       
    15 		public InBuffer(uint bufferSize)
       
    16 		{
       
    17 			m_Buffer = new byte[bufferSize];
       
    18 			m_BufferSize = bufferSize;
       
    19 		}
       
    20 
       
    21 		public void Init(System.IO.Stream stream)
       
    22 		{
       
    23 			m_Stream = stream;
       
    24 			m_ProcessedSize = 0;
       
    25 			m_Limit = 0;
       
    26 			m_Pos = 0;
       
    27 			m_StreamWasExhausted = false;
       
    28 		}
       
    29 
       
    30 		public bool ReadBlock()
       
    31 		{
       
    32 			if (m_StreamWasExhausted)
       
    33 				return false;
       
    34 			m_ProcessedSize += m_Pos;
       
    35 			int aNumProcessedBytes = m_Stream.Read(m_Buffer, 0, (int)m_BufferSize);
       
    36 			m_Pos = 0;
       
    37 			m_Limit = (uint)aNumProcessedBytes;
       
    38 			m_StreamWasExhausted = (aNumProcessedBytes == 0);
       
    39 			return (!m_StreamWasExhausted);
       
    40 		}
       
    41 
       
    42 
       
    43 		public void ReleaseStream()
       
    44 		{
       
    45 			// m_Stream.Close(); 
       
    46 			m_Stream = null;
       
    47 		}
       
    48 
       
    49 		public bool ReadByte(byte b) // check it
       
    50 		{
       
    51 			if (m_Pos >= m_Limit)
       
    52 				if (!ReadBlock())
       
    53 					return false;
       
    54 			b = m_Buffer[m_Pos++];
       
    55 			return true;
       
    56 		}
       
    57 
       
    58 		public byte ReadByte()
       
    59 		{
       
    60 			// return (byte)m_Stream.ReadByte();
       
    61 			if (m_Pos >= m_Limit)
       
    62 				if (!ReadBlock())
       
    63 					return 0xFF;
       
    64 			return m_Buffer[m_Pos++];
       
    65 		}
       
    66 
       
    67 		public ulong GetProcessedSize()
       
    68 		{
       
    69 			return m_ProcessedSize + m_Pos;
       
    70 		}
       
    71 	}
       
    72 }