xref: /aosp_15_r20/external/lzma/CPP/7zip/Archive/7z/7zSpecStream.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
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