Annotation of elwix/tools/oldlzma/SRC/7zip/Common/InBuffer.cpp, revision 1.1.1.1
1.1 misho 1: // InBuffer.cpp
2:
3: #include "StdAfx.h"
4:
5: #include "InBuffer.h"
6:
7: #include "../../Common/Alloc.h"
8:
9: CInBuffer::CInBuffer():
10: _bufferBase(0),
11: _bufferSize(0),
12: _buffer(0),
13: _bufferLimit(0),
14: _stream(0)
15: {}
16:
17: bool CInBuffer::Create(UInt32 bufferSize)
18: {
19: const UInt32 kMinBlockSize = 1;
20: if (bufferSize < kMinBlockSize)
21: bufferSize = kMinBlockSize;
22: if (_bufferBase != 0 && _bufferSize == bufferSize)
23: return true;
24: Free();
25: _bufferSize = bufferSize;
26: _bufferBase = (Byte *)::BigAlloc(bufferSize);
27: return (_bufferBase != 0);
28: }
29:
30: void CInBuffer::Free()
31: {
32: BigFree(_bufferBase);
33: _bufferBase = 0;
34: }
35:
36: void CInBuffer::SetStream(ISequentialInStream *stream)
37: {
38: _stream = stream;
39: }
40:
41: void CInBuffer::Init()
42: {
43: _processedSize = 0;
44: _buffer = _bufferBase;
45: _bufferLimit = _buffer;
46: _wasFinished = false;
47: #ifdef _NO_EXCEPTIONS
48: ErrorCode = S_OK;
49: #endif
50: }
51:
52: bool CInBuffer::ReadBlock()
53: {
54: #ifdef _NO_EXCEPTIONS
55: if (ErrorCode != S_OK)
56: return false;
57: #endif
58: if (_wasFinished)
59: return false;
60: _processedSize += (_buffer - _bufferBase);
61: UInt32 numProcessedBytes;
62: HRESULT result = _stream->ReadPart(_bufferBase, _bufferSize, &numProcessedBytes);
63: #ifdef _NO_EXCEPTIONS
64: ErrorCode = result;
65: #else
66: if (result != S_OK)
67: throw CInBufferException(result);
68: #endif
69: _buffer = _bufferBase;
70: _bufferLimit = _buffer + numProcessedBytes;
71: _wasFinished = (numProcessedBytes == 0);
72: return (!_wasFinished);
73: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>