OLD | NEW |
| (Empty) |
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 } | |
OLD | NEW |