1*f6dc9357SAndroid Build Coastguard Worker // HandlerCont.h 2*f6dc9357SAndroid Build Coastguard Worker 3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_HANDLER_CONT_H 4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_HANDLER_CONT_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 "IArchive.h" 9*f6dc9357SAndroid Build Coastguard Worker 10*f6dc9357SAndroid Build Coastguard Worker namespace NArchive { 11*f6dc9357SAndroid Build Coastguard Worker 12*f6dc9357SAndroid Build Coastguard Worker #define Z7_IFACEM_IInArchive_Cont(x) \ 13*f6dc9357SAndroid Build Coastguard Worker x(Open(IInStream *stream, const UInt64 *maxCheckStartPosition, IArchiveOpenCallback *openCallback)) \ 14*f6dc9357SAndroid Build Coastguard Worker x(Close()) \ 15*f6dc9357SAndroid Build Coastguard Worker x(GetNumberOfItems(UInt32 *numItems)) \ 16*f6dc9357SAndroid Build Coastguard Worker x(GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value)) \ 17*f6dc9357SAndroid Build Coastguard Worker /* x(Extract(const UInt32 *indices, UInt32 numItems, Int32 testMode, IArchiveExtractCallback *extractCallback)) */ \ 18*f6dc9357SAndroid Build Coastguard Worker x(GetArchiveProperty(PROPID propID, PROPVARIANT *value)) \ 19*f6dc9357SAndroid Build Coastguard Worker x(GetNumberOfProperties(UInt32 *numProps)) \ 20*f6dc9357SAndroid Build Coastguard Worker x(GetPropertyInfo(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType)) \ 21*f6dc9357SAndroid Build Coastguard Worker x(GetNumberOfArchiveProperties(UInt32 *numProps)) \ 22*f6dc9357SAndroid Build Coastguard Worker x(GetArchivePropertyInfo(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType)) \ 23*f6dc9357SAndroid Build Coastguard Worker 24*f6dc9357SAndroid Build Coastguard Worker 25*f6dc9357SAndroid Build Coastguard Worker // #define Z7_COM7F_PUREO(f) virtual Z7_COM7F_IMF(f) Z7_override =0; 26*f6dc9357SAndroid Build Coastguard Worker // #define Z7_COM7F_PUREO2(t, f) virtual Z7_COM7F_IMF2(t, f) Z7_override =0; 27*f6dc9357SAndroid Build Coastguard Worker 28*f6dc9357SAndroid Build Coastguard Worker class CHandlerCont: 29*f6dc9357SAndroid Build Coastguard Worker public IInArchive, 30*f6dc9357SAndroid Build Coastguard Worker public IInArchiveGetStream, 31*f6dc9357SAndroid Build Coastguard Worker public CMyUnknownImp 32*f6dc9357SAndroid Build Coastguard Worker { 33*f6dc9357SAndroid Build Coastguard Worker Z7_COM_UNKNOWN_IMP_2( 34*f6dc9357SAndroid Build Coastguard Worker IInArchive, 35*f6dc9357SAndroid Build Coastguard Worker IInArchiveGetStream) 36*f6dc9357SAndroid Build Coastguard Worker /* 37*f6dc9357SAndroid Build Coastguard Worker Z7_IFACEM_IInArchive_Cont(Z7_COM7F_PUREO) 38*f6dc9357SAndroid Build Coastguard Worker // Z7_IFACE_COM7_PURE(IInArchive_Cont) 39*f6dc9357SAndroid Build Coastguard Worker */ 40*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMP(Extract(const UInt32 *indices, UInt32 numItems, Int32 testMode, IArchiveExtractCallback *extractCallback)) 41*f6dc9357SAndroid Build Coastguard Worker protected: 42*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IInArchiveGetStream) 43*f6dc9357SAndroid Build Coastguard Worker 44*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<IInStream> _stream; 45*f6dc9357SAndroid Build Coastguard Worker virtual int GetItem_ExtractInfo(UInt32 index, UInt64 &pos, UInt64 &size) const = 0; 46*f6dc9357SAndroid Build Coastguard Worker // destructor must be virtual for this class ~CHandlerCont()47*f6dc9357SAndroid Build Coastguard Worker virtual ~CHandlerCont() {} 48*f6dc9357SAndroid Build Coastguard Worker }; 49*f6dc9357SAndroid Build Coastguard Worker 50*f6dc9357SAndroid Build Coastguard Worker 51*f6dc9357SAndroid Build Coastguard Worker 52*f6dc9357SAndroid Build Coastguard Worker #define Z7_IFACEM_IInArchive_Img(x) \ 53*f6dc9357SAndroid Build Coastguard Worker /* x(Open(IInStream *stream, const UInt64 *maxCheckStartPosition, IArchiveOpenCallback *openCallback)) */ \ 54*f6dc9357SAndroid Build Coastguard Worker x(Close()) \ 55*f6dc9357SAndroid Build Coastguard Worker /* x(GetNumberOfItems(UInt32 *numItems)) */ \ 56*f6dc9357SAndroid Build Coastguard Worker x(GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value)) \ 57*f6dc9357SAndroid Build Coastguard Worker /* x(Extract(const UInt32 *indices, UInt32 numItems, Int32 testMode, IArchiveExtractCallback *extractCallback)) */ \ 58*f6dc9357SAndroid Build Coastguard Worker x(GetArchiveProperty(PROPID propID, PROPVARIANT *value)) \ 59*f6dc9357SAndroid Build Coastguard Worker x(GetNumberOfProperties(UInt32 *numProps)) \ 60*f6dc9357SAndroid Build Coastguard Worker x(GetPropertyInfo(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType)) \ 61*f6dc9357SAndroid Build Coastguard Worker x(GetNumberOfArchiveProperties(UInt32 *numProps)) \ 62*f6dc9357SAndroid Build Coastguard Worker x(GetArchivePropertyInfo(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType)) \ 63*f6dc9357SAndroid Build Coastguard Worker 64*f6dc9357SAndroid Build Coastguard Worker 65*f6dc9357SAndroid Build Coastguard Worker class CHandlerImg: 66*f6dc9357SAndroid Build Coastguard Worker public IInArchive, 67*f6dc9357SAndroid Build Coastguard Worker public IInArchiveGetStream, 68*f6dc9357SAndroid Build Coastguard Worker public IInStream, 69*f6dc9357SAndroid Build Coastguard Worker public CMyUnknownImp 70*f6dc9357SAndroid Build Coastguard Worker { 71*f6dc9357SAndroid Build Coastguard Worker Z7_COM_UNKNOWN_IMP_4( 72*f6dc9357SAndroid Build Coastguard Worker IInArchive, 73*f6dc9357SAndroid Build Coastguard Worker IInArchiveGetStream, 74*f6dc9357SAndroid Build Coastguard Worker ISequentialInStream, 75*f6dc9357SAndroid Build Coastguard Worker IInStream) 76*f6dc9357SAndroid Build Coastguard Worker 77*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMP(Open(IInStream *stream, const UInt64 *maxCheckStartPosition, IArchiveOpenCallback *openCallback)) 78*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMP(GetNumberOfItems(UInt32 *numItems)) 79*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMP(Extract(const UInt32 *indices, UInt32 numItems, Int32 testMode, IArchiveExtractCallback *extractCallback)) 80*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(IInStream) 81*f6dc9357SAndroid Build Coastguard Worker // Z7_IFACEM_IInArchive_Img(Z7_COM7F_PUREO) 82*f6dc9357SAndroid Build Coastguard Worker 83*f6dc9357SAndroid Build Coastguard Worker protected: 84*f6dc9357SAndroid Build Coastguard Worker bool _stream_unavailData; 85*f6dc9357SAndroid Build Coastguard Worker bool _stream_unsupportedMethod; 86*f6dc9357SAndroid Build Coastguard Worker bool _stream_dataError; 87*f6dc9357SAndroid Build Coastguard Worker // bool _stream_UsePackSize; 88*f6dc9357SAndroid Build Coastguard Worker // UInt64 _stream_PackSize; 89*f6dc9357SAndroid Build Coastguard Worker UInt64 _virtPos; 90*f6dc9357SAndroid Build Coastguard Worker UInt64 _posInArc; 91*f6dc9357SAndroid Build Coastguard Worker UInt64 _size; 92*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<IInStream> Stream; 93*f6dc9357SAndroid Build Coastguard Worker const char *_imgExt; 94*f6dc9357SAndroid Build Coastguard Worker Reset_PosInArc()95*f6dc9357SAndroid Build Coastguard Worker void Reset_PosInArc() { _posInArc = (UInt64)0 - 1; } Reset_VirtPos()96*f6dc9357SAndroid Build Coastguard Worker void Reset_VirtPos() { _virtPos = (UInt64)0; } 97*f6dc9357SAndroid Build Coastguard Worker ClearStreamVars()98*f6dc9357SAndroid Build Coastguard Worker void ClearStreamVars() 99*f6dc9357SAndroid Build Coastguard Worker { 100*f6dc9357SAndroid Build Coastguard Worker _stream_unavailData = false; 101*f6dc9357SAndroid Build Coastguard Worker _stream_unsupportedMethod = false; 102*f6dc9357SAndroid Build Coastguard Worker _stream_dataError = false; 103*f6dc9357SAndroid Build Coastguard Worker // _stream_UsePackSize = false; 104*f6dc9357SAndroid Build Coastguard Worker // _stream_PackSize = 0; 105*f6dc9357SAndroid Build Coastguard Worker } 106*f6dc9357SAndroid Build Coastguard Worker 107*f6dc9357SAndroid Build Coastguard Worker void Clear_HandlerImg_Vars(); // it doesn't Release (Stream) var. 108*f6dc9357SAndroid Build Coastguard Worker 109*f6dc9357SAndroid Build Coastguard Worker virtual HRESULT Open2(IInStream *stream, IArchiveOpenCallback *openCallback) = 0; 110*f6dc9357SAndroid Build Coastguard Worker virtual void CloseAtError(); 111*f6dc9357SAndroid Build Coastguard Worker 112*f6dc9357SAndroid Build Coastguard Worker // returns (true), if Get_PackSizeProcessed() is required in Extract() Init_PackSizeProcessed()113*f6dc9357SAndroid Build Coastguard Worker virtual bool Init_PackSizeProcessed() 114*f6dc9357SAndroid Build Coastguard Worker { 115*f6dc9357SAndroid Build Coastguard Worker return false; 116*f6dc9357SAndroid Build Coastguard Worker } 117*f6dc9357SAndroid Build Coastguard Worker public: Get_PackSizeProcessed(UInt64 & size)118*f6dc9357SAndroid Build Coastguard Worker virtual bool Get_PackSizeProcessed(UInt64 &size) 119*f6dc9357SAndroid Build Coastguard Worker { 120*f6dc9357SAndroid Build Coastguard Worker size = 0; 121*f6dc9357SAndroid Build Coastguard Worker return false; 122*f6dc9357SAndroid Build Coastguard Worker } 123*f6dc9357SAndroid Build Coastguard Worker 124*f6dc9357SAndroid Build Coastguard Worker CHandlerImg(); 125*f6dc9357SAndroid Build Coastguard Worker // destructor must be virtual for this class ~CHandlerImg()126*f6dc9357SAndroid Build Coastguard Worker virtual ~CHandlerImg() {} 127*f6dc9357SAndroid Build Coastguard Worker }; 128*f6dc9357SAndroid Build Coastguard Worker 129*f6dc9357SAndroid Build Coastguard Worker 130*f6dc9357SAndroid Build Coastguard Worker HRESULT ReadZeroTail(ISequentialInStream *stream, bool &areThereNonZeros, UInt64 &numZeros, UInt64 maxSize); 131*f6dc9357SAndroid Build Coastguard Worker 132*f6dc9357SAndroid Build Coastguard Worker } 133*f6dc9357SAndroid Build Coastguard Worker 134*f6dc9357SAndroid Build Coastguard Worker #endif 135