1*f6dc9357SAndroid Build Coastguard Worker // MultiStream.h 2*f6dc9357SAndroid Build Coastguard Worker 3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_MULTI_STREAM_H 4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_MULTI_STREAM_H 5*f6dc9357SAndroid Build Coastguard Worker 6*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/MyCom.h" 7*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/MyVector.h" 8*f6dc9357SAndroid Build Coastguard Worker 9*f6dc9357SAndroid Build Coastguard Worker #include "../../IStream.h" 10*f6dc9357SAndroid Build Coastguard Worker #include "../../Archive/IArchive.h" 11*f6dc9357SAndroid Build Coastguard Worker 12*f6dc9357SAndroid Build Coastguard Worker Z7_CLASS_IMP_IInStream( 13*f6dc9357SAndroid Build Coastguard Worker CMultiStream 14*f6dc9357SAndroid Build Coastguard Worker ) 15*f6dc9357SAndroid Build Coastguard Worker 16*f6dc9357SAndroid Build Coastguard Worker unsigned _streamIndex; 17*f6dc9357SAndroid Build Coastguard Worker UInt64 _pos; 18*f6dc9357SAndroid Build Coastguard Worker UInt64 _totalLength; 19*f6dc9357SAndroid Build Coastguard Worker 20*f6dc9357SAndroid Build Coastguard Worker public: 21*f6dc9357SAndroid Build Coastguard Worker 22*f6dc9357SAndroid Build Coastguard Worker struct CSubStreamInfo 23*f6dc9357SAndroid Build Coastguard Worker { 24*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<IInStream> Stream; 25*f6dc9357SAndroid Build Coastguard Worker UInt64 Size; 26*f6dc9357SAndroid Build Coastguard Worker UInt64 GlobalOffset; 27*f6dc9357SAndroid Build Coastguard Worker UInt64 LocalPos; CSubStreamInfoCSubStreamInfo28*f6dc9357SAndroid Build Coastguard Worker CSubStreamInfo(): Size(0), GlobalOffset(0), LocalPos(0) {} 29*f6dc9357SAndroid Build Coastguard Worker }; 30*f6dc9357SAndroid Build Coastguard Worker 31*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<IArchiveUpdateCallbackFile> updateCallbackFile; 32*f6dc9357SAndroid Build Coastguard Worker CObjectVector<CSubStreamInfo> Streams; 33*f6dc9357SAndroid Build Coastguard Worker Init()34*f6dc9357SAndroid Build Coastguard Worker HRESULT Init() 35*f6dc9357SAndroid Build Coastguard Worker { 36*f6dc9357SAndroid Build Coastguard Worker UInt64 total = 0; 37*f6dc9357SAndroid Build Coastguard Worker FOR_VECTOR (i, Streams) 38*f6dc9357SAndroid Build Coastguard Worker { 39*f6dc9357SAndroid Build Coastguard Worker CSubStreamInfo &s = Streams[i]; 40*f6dc9357SAndroid Build Coastguard Worker s.GlobalOffset = total; 41*f6dc9357SAndroid Build Coastguard Worker total += s.Size; 42*f6dc9357SAndroid Build Coastguard Worker s.LocalPos = 0; 43*f6dc9357SAndroid Build Coastguard Worker { 44*f6dc9357SAndroid Build Coastguard Worker // it was already set to start 45*f6dc9357SAndroid Build Coastguard Worker // RINOK(InStream_GetPos(s.Stream, s.LocalPos)); 46*f6dc9357SAndroid Build Coastguard Worker } 47*f6dc9357SAndroid Build Coastguard Worker } 48*f6dc9357SAndroid Build Coastguard Worker _totalLength = total; 49*f6dc9357SAndroid Build Coastguard Worker _pos = 0; 50*f6dc9357SAndroid Build Coastguard Worker _streamIndex = 0; 51*f6dc9357SAndroid Build Coastguard Worker return S_OK; 52*f6dc9357SAndroid Build Coastguard Worker } 53*f6dc9357SAndroid Build Coastguard Worker }; 54*f6dc9357SAndroid Build Coastguard Worker 55*f6dc9357SAndroid Build Coastguard Worker /* 56*f6dc9357SAndroid Build Coastguard Worker Z7_CLASS_IMP_COM_1( 57*f6dc9357SAndroid Build Coastguard Worker COutMultiStream, 58*f6dc9357SAndroid Build Coastguard Worker IOutStream 59*f6dc9357SAndroid Build Coastguard Worker ) 60*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(ISequentialOutStream) 61*f6dc9357SAndroid Build Coastguard Worker 62*f6dc9357SAndroid Build Coastguard Worker unsigned _streamIndex; // required stream 63*f6dc9357SAndroid Build Coastguard Worker UInt64 _offsetPos; // offset from start of _streamIndex index 64*f6dc9357SAndroid Build Coastguard Worker UInt64 _absPos; 65*f6dc9357SAndroid Build Coastguard Worker UInt64 _length; 66*f6dc9357SAndroid Build Coastguard Worker 67*f6dc9357SAndroid Build Coastguard Worker struct CSubStreamInfo 68*f6dc9357SAndroid Build Coastguard Worker { 69*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<ISequentialOutStream> Stream; 70*f6dc9357SAndroid Build Coastguard Worker UInt64 Size; 71*f6dc9357SAndroid Build Coastguard Worker UInt64 Pos; 72*f6dc9357SAndroid Build Coastguard Worker }; 73*f6dc9357SAndroid Build Coastguard Worker CObjectVector<CSubStreamInfo> Streams; 74*f6dc9357SAndroid Build Coastguard Worker public: 75*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<IArchiveUpdateCallback2> VolumeCallback; 76*f6dc9357SAndroid Build Coastguard Worker void Init() 77*f6dc9357SAndroid Build Coastguard Worker { 78*f6dc9357SAndroid Build Coastguard Worker _streamIndex = 0; 79*f6dc9357SAndroid Build Coastguard Worker _offsetPos = 0; 80*f6dc9357SAndroid Build Coastguard Worker _absPos = 0; 81*f6dc9357SAndroid Build Coastguard Worker _length = 0; 82*f6dc9357SAndroid Build Coastguard Worker } 83*f6dc9357SAndroid Build Coastguard Worker }; 84*f6dc9357SAndroid Build Coastguard Worker */ 85*f6dc9357SAndroid Build Coastguard Worker 86*f6dc9357SAndroid Build Coastguard Worker #endif 87