allow coexistance of N build and AC build.
[tomato.git] / release / src-rt-6.x / linux / linux-2.6 / scripts / squashfs / lzma / C / 7zip / Common / InBuffer.h
bloba59ecefacd0d90ace0b88e37d233e7939f4fdf7e
1 // InBuffer.h
3 #ifndef __INBUFFER_H
4 #define __INBUFFER_H
6 #include "../IStream.h"
7 #include "../../Common/MyCom.h"
9 #ifndef _NO_EXCEPTIONS
10 class CInBufferException
12 public:
13 HRESULT ErrorCode;
14 CInBufferException(HRESULT errorCode): ErrorCode(errorCode) {}
16 #endif
18 class CInBuffer
20 Byte *_buffer;
21 Byte *_bufferLimit;
22 Byte *_bufferBase;
23 CMyComPtr<ISequentialInStream> _stream;
24 UInt64 _processedSize;
25 UInt32 _bufferSize;
26 bool _wasFinished;
28 bool ReadBlock();
29 Byte ReadBlock2();
31 public:
32 #ifdef _NO_EXCEPTIONS
33 HRESULT ErrorCode;
34 #endif
36 CInBuffer();
37 ~CInBuffer() { Free(); }
39 bool Create(UInt32 bufferSize);
40 void Free();
42 void SetStream(ISequentialInStream *stream);
43 void Init();
44 void ReleaseStream() { _stream.Release(); }
46 bool ReadByte(Byte &b)
48 if(_buffer >= _bufferLimit)
49 if(!ReadBlock())
50 return false;
51 b = *_buffer++;
52 return true;
54 Byte ReadByte()
56 if(_buffer >= _bufferLimit)
57 return ReadBlock2();
58 return *_buffer++;
60 void ReadBytes(void *data, UInt32 size, UInt32 &processedSize)
62 for(processedSize = 0; processedSize < size; processedSize++)
63 if (!ReadByte(((Byte *)data)[processedSize]))
64 return;
66 bool ReadBytes(void *data, UInt32 size)
68 UInt32 processedSize;
69 ReadBytes(data, size, processedSize);
70 return (processedSize == size);
72 UInt64 GetProcessedSize() const { return _processedSize + (_buffer - _bufferBase); }
73 bool WasFinished() const { return _wasFinished; }
76 #endif