mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-13 18:11:37 -06:00
42 lines
870 B
C++
Executable File
42 lines
870 B
C++
Executable File
// InBuffer.cpp
|
|
|
|
#include "stdafx.h"
|
|
|
|
#include "InBuffer.h"
|
|
|
|
CInBuffer::CInBuffer(UINT32 bufferSize):
|
|
_bufferSize(bufferSize),
|
|
_bufferBase(0)
|
|
{
|
|
_bufferBase = new BYTE[_bufferSize];
|
|
}
|
|
|
|
CInBuffer::~CInBuffer()
|
|
{
|
|
delete []_bufferBase;
|
|
}
|
|
|
|
void CInBuffer::Init(ISequentialInStream *stream)
|
|
{
|
|
_stream = stream;
|
|
_processedSize = 0;
|
|
_buffer = _bufferBase;
|
|
_bufferLimit = _buffer;
|
|
_streamWasExhausted = false;
|
|
}
|
|
|
|
bool CInBuffer::ReadBlock()
|
|
{
|
|
if (_streamWasExhausted)
|
|
return false;
|
|
_processedSize += (_buffer - _bufferBase);
|
|
UINT32 numProcessedBytes;
|
|
HRESULT result = _stream->ReadPart(_bufferBase, _bufferSize, &numProcessedBytes);
|
|
if (result != S_OK)
|
|
throw CInBufferException(result);
|
|
_buffer = _bufferBase;
|
|
_bufferLimit = _buffer + numProcessedBytes;
|
|
_streamWasExhausted = (numProcessedBytes == 0);
|
|
return (!_streamWasExhausted);
|
|
}
|