equal
deleted
inserted
replaced
|
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 } |