Annotation of elwix/tools/oldlzma/SRC/7zip/Common/InBuffer.h, revision 1.1.1.1
1.1 misho 1: // InBuffer.h
2:
3: #ifndef __INBUFFER_H
4: #define __INBUFFER_H
5:
6: #include "../IStream.h"
7: #include "../../Common/MyCom.h"
8:
9: #ifndef _NO_EXCEPTIONS
10: class CInBufferException
11: {
12: public:
13: HRESULT ErrorCode;
14: CInBufferException(HRESULT errorCode): ErrorCode(errorCode) {}
15: };
16: #endif
17:
18: class CInBuffer
19: {
20: UInt64 _processedSize;
21: Byte *_bufferBase;
22: UInt32 _bufferSize;
23: Byte *_buffer;
24: Byte *_bufferLimit;
25: CMyComPtr<ISequentialInStream> _stream;
26: bool _wasFinished;
27:
28: bool ReadBlock();
29:
30: public:
31: #ifdef _NO_EXCEPTIONS
32: HRESULT ErrorCode;
33: #endif
34:
35: CInBuffer();
36: ~CInBuffer() { Free(); }
37:
38: bool Create(UInt32 bufferSize);
39: void Free();
40:
41: void SetStream(ISequentialInStream *stream);
42: void Init();
43: void ReleaseStream() { _stream.Release(); }
44:
45: bool ReadByte(Byte &b)
46: {
47: if(_buffer >= _bufferLimit)
48: if(!ReadBlock())
49: return false;
50: b = *_buffer++;
51: return true;
52: }
53: Byte ReadByte()
54: {
55: if(_buffer >= _bufferLimit)
56: if(!ReadBlock())
57: return 0xFF;
58: return *_buffer++;
59: }
60: void ReadBytes(void *data, UInt32 size, UInt32 &processedSize)
61: {
62: for(processedSize = 0; processedSize < size; processedSize++)
63: if (!ReadByte(((Byte *)data)[processedSize]))
64: return;
65: }
66: bool ReadBytes(void *data, UInt32 size)
67: {
68: UInt32 processedSize;
69: ReadBytes(data, size, processedSize);
70: return (processedSize == size);
71: }
72: UInt64 GetProcessedSize() const { return _processedSize + (_buffer - _bufferBase); }
73: bool WasFinished() const { return _wasFinished; }
74: };
75:
76: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>