RT-AC66 3.0.0.4.374.130 core
[tomato.git] / release / src-rt-6.x / linux / linux-2.6 / scripts / squashfs / lzma / CS / 7zip / Common / InBuffer.cs
blob9c47c73ae3e51170c7c6c0b7e538e13a39920fc6
1 // InBuffer.cs
3 namespace SevenZip.Buffer
5 public class InBuffer
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;
15 public InBuffer(uint bufferSize)
17 m_Buffer = new byte[bufferSize];
18 m_BufferSize = bufferSize;
21 public void Init(System.IO.Stream stream)
23 m_Stream = stream;
24 m_ProcessedSize = 0;
25 m_Limit = 0;
26 m_Pos = 0;
27 m_StreamWasExhausted = false;
30 public bool ReadBlock()
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);
43 public void ReleaseStream()
45 // m_Stream.Close();
46 m_Stream = null;
49 public bool ReadByte(byte b) // check it
51 if (m_Pos >= m_Limit)
52 if (!ReadBlock())
53 return false;
54 b = m_Buffer[m_Pos++];
55 return true;
58 public byte ReadByte()
60 // return (byte)m_Stream.ReadByte();
61 if (m_Pos >= m_Limit)
62 if (!ReadBlock())
63 return 0xFF;
64 return m_Buffer[m_Pos++];
67 public ulong GetProcessedSize()
69 return m_ProcessedSize + m_Pos;