48 lines
897 B
C#
48 lines
897 B
C#
|
// OutBuffer.cs
|
||
|
|
||
|
namespace SevenZip.Buffer
|
||
|
{
|
||
|
public class OutBuffer
|
||
|
{
|
||
|
byte[] m_Buffer;
|
||
|
uint m_Pos;
|
||
|
uint m_BufferSize;
|
||
|
System.IO.Stream m_Stream;
|
||
|
ulong m_ProcessedSize;
|
||
|
|
||
|
public OutBuffer(uint bufferSize)
|
||
|
{
|
||
|
m_Buffer = new byte[bufferSize];
|
||
|
m_BufferSize = bufferSize;
|
||
|
}
|
||
|
|
||
|
public void SetStream(System.IO.Stream stream) { m_Stream = stream; }
|
||
|
public void FlushStream() { m_Stream.Flush(); }
|
||
|
public void CloseStream() { m_Stream.Close(); }
|
||
|
public void ReleaseStream() { m_Stream = null; }
|
||
|
|
||
|
public void Init()
|
||
|
{
|
||
|
m_ProcessedSize = 0;
|
||
|
m_Pos = 0;
|
||
|
}
|
||
|
|
||
|
public void WriteByte(byte b)
|
||
|
{
|
||
|
m_Buffer[m_Pos++] = b;
|
||
|
if (m_Pos >= m_BufferSize)
|
||
|
FlushData();
|
||
|
}
|
||
|
|
||
|
public void FlushData()
|
||
|
{
|
||
|
if (m_Pos == 0)
|
||
|
return;
|
||
|
m_Stream.Write(m_Buffer, 0, (int)m_Pos);
|
||
|
m_Pos = 0;
|
||
|
}
|
||
|
|
||
|
public ulong GetProcessedSize() { return m_ProcessedSize + m_Pos; }
|
||
|
}
|
||
|
}
|