Mercurial > vba-linux
annotate src/win32/7zip/7z/CPP/7zip/Common/LimitedStreams.h @ 1:f9f4f1b99eed
importing src directory
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 03 Mar 2012 10:31:27 -0600 |
parents | |
children |
rev | line source |
---|---|
rlm@1 | 1 // LimitedStreams.h |
rlm@1 | 2 |
rlm@1 | 3 #ifndef __LIMITEDSTREAMS_H |
rlm@1 | 4 #define __LIMITEDSTREAMS_H |
rlm@1 | 5 |
rlm@1 | 6 #include "../../Common/MyCom.h" |
rlm@1 | 7 #include "../IStream.h" |
rlm@1 | 8 |
rlm@1 | 9 class CLimitedSequentialInStream: |
rlm@1 | 10 public ISequentialInStream, |
rlm@1 | 11 public CMyUnknownImp |
rlm@1 | 12 { |
rlm@1 | 13 CMyComPtr<ISequentialInStream> _stream; |
rlm@1 | 14 UInt64 _size; |
rlm@1 | 15 UInt64 _pos; |
rlm@1 | 16 bool _wasFinished; |
rlm@1 | 17 public: |
rlm@1 | 18 void SetStream(ISequentialInStream *stream) { _stream = stream; } |
rlm@1 | 19 void Init(UInt64 streamSize) |
rlm@1 | 20 { |
rlm@1 | 21 _size = streamSize; |
rlm@1 | 22 _pos = 0; |
rlm@1 | 23 _wasFinished = false; |
rlm@1 | 24 } |
rlm@1 | 25 |
rlm@1 | 26 MY_UNKNOWN_IMP |
rlm@1 | 27 |
rlm@1 | 28 STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); |
rlm@1 | 29 UInt64 GetSize() const { return _pos; } |
rlm@1 | 30 bool WasFinished() const { return _wasFinished; } |
rlm@1 | 31 }; |
rlm@1 | 32 |
rlm@1 | 33 class CLimitedSequentialOutStream: |
rlm@1 | 34 public ISequentialOutStream, |
rlm@1 | 35 public CMyUnknownImp |
rlm@1 | 36 { |
rlm@1 | 37 CMyComPtr<ISequentialOutStream> _stream; |
rlm@1 | 38 UInt64 _size; |
rlm@1 | 39 bool _overflow; |
rlm@1 | 40 public: |
rlm@1 | 41 MY_UNKNOWN_IMP |
rlm@1 | 42 STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); |
rlm@1 | 43 void SetStream(ISequentialOutStream *stream) { _stream = stream; } |
rlm@1 | 44 void ReleaseStream() { _stream.Release(); } |
rlm@1 | 45 void Init(UInt64 size) |
rlm@1 | 46 { |
rlm@1 | 47 _size = size; |
rlm@1 | 48 _overflow = false; |
rlm@1 | 49 } |
rlm@1 | 50 bool IsFinishedOK() const { return (_size == 0 && !_overflow); } |
rlm@1 | 51 UInt64 GetRem() const { return _size; } |
rlm@1 | 52 }; |
rlm@1 | 53 |
rlm@1 | 54 #endif |