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