1*f6dc9357SAndroid Build Coastguard Worker // 7zSpecStream.h 2*f6dc9357SAndroid Build Coastguard Worker 3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_7Z_SPEC_STREAM_H 4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_7Z_SPEC_STREAM_H 5*f6dc9357SAndroid Build Coastguard Worker 6*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/MyCom.h" 7*f6dc9357SAndroid Build Coastguard Worker 8*f6dc9357SAndroid Build Coastguard Worker #include "../../ICoder.h" 9*f6dc9357SAndroid Build Coastguard Worker 10*f6dc9357SAndroid Build Coastguard Worker /* 11*f6dc9357SAndroid Build Coastguard Worker #define Z7_COM_QI_ENTRY_AG_2(i, sub0, sub) else if (iid == IID_ ## i) \ 12*f6dc9357SAndroid Build Coastguard Worker { if (!sub) RINOK(sub0->QueryInterface(IID_ ## i, (void **)&sub)) \ 13*f6dc9357SAndroid Build Coastguard Worker { i *ti = this; *outObject = ti; } } 14*f6dc9357SAndroid Build Coastguard Worker 15*f6dc9357SAndroid Build Coastguard Worker class CSequentialInStreamSizeCount2 Z7_final: 16*f6dc9357SAndroid Build Coastguard Worker public ISequentialInStream, 17*f6dc9357SAndroid Build Coastguard Worker public ICompressGetSubStreamSize, 18*f6dc9357SAndroid Build Coastguard Worker public ICompressInSubStreams, 19*f6dc9357SAndroid Build Coastguard Worker public CMyUnknownImp 20*f6dc9357SAndroid Build Coastguard Worker { 21*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_BEGIN2(ISequentialInStream) 22*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(ICompressGetSubStreamSize) 23*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY_AG_2(ISequentialInStream, _stream, _compressGetSubStreamSize) 24*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_END 25*f6dc9357SAndroid Build Coastguard Worker Z7_COM_ADDREF_RELEASE 26*f6dc9357SAndroid Build Coastguard Worker 27*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(ISequentialInStream) 28*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(ICompressGetSubStreamSize) 29*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(ICompressInSubStreams) 30*f6dc9357SAndroid Build Coastguard Worker 31*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<ISequentialInStream> _stream; 32*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<ICompressGetSubStreamSize> _getSubStreamSize; 33*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<ICompressInSubStreams> _compressGetSubStreamSize; 34*f6dc9357SAndroid Build Coastguard Worker UInt64 _size; 35*f6dc9357SAndroid Build Coastguard Worker public: 36*f6dc9357SAndroid Build Coastguard Worker void Init(ISequentialInStream *stream) 37*f6dc9357SAndroid Build Coastguard Worker { 38*f6dc9357SAndroid Build Coastguard Worker _size = 0; 39*f6dc9357SAndroid Build Coastguard Worker _getSubStreamSize.Release(); 40*f6dc9357SAndroid Build Coastguard Worker _compressGetSubStreamSize.Release(); 41*f6dc9357SAndroid Build Coastguard Worker _stream = stream; 42*f6dc9357SAndroid Build Coastguard Worker _stream.QueryInterface(IID_ICompressGetSubStreamSize, &_getSubStreamSize); 43*f6dc9357SAndroid Build Coastguard Worker _stream.QueryInterface(IID_ICompressInSubStreams, &_compressGetSubStreamSize); 44*f6dc9357SAndroid Build Coastguard Worker } 45*f6dc9357SAndroid Build Coastguard Worker UInt64 GetSize() const { return _size; } 46*f6dc9357SAndroid Build Coastguard Worker }; 47*f6dc9357SAndroid Build Coastguard Worker */ 48*f6dc9357SAndroid Build Coastguard Worker 49*f6dc9357SAndroid Build Coastguard Worker #endif 50