1*f6dc9357SAndroid Build Coastguard Worker // Bcj2Coder.h 2*f6dc9357SAndroid Build Coastguard Worker 3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_COMPRESS_BCJ2_CODER_H 4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_COMPRESS_BCJ2_CODER_H 5*f6dc9357SAndroid Build Coastguard Worker 6*f6dc9357SAndroid Build Coastguard Worker #include "../../../C/Bcj2.h" 7*f6dc9357SAndroid Build Coastguard Worker 8*f6dc9357SAndroid Build Coastguard Worker #include "../../Common/MyCom.h" 9*f6dc9357SAndroid Build Coastguard Worker 10*f6dc9357SAndroid Build Coastguard Worker #include "../ICoder.h" 11*f6dc9357SAndroid Build Coastguard Worker 12*f6dc9357SAndroid Build Coastguard Worker namespace NCompress { 13*f6dc9357SAndroid Build Coastguard Worker namespace NBcj2 { 14*f6dc9357SAndroid Build Coastguard Worker 15*f6dc9357SAndroid Build Coastguard Worker class CBaseCoder 16*f6dc9357SAndroid Build Coastguard Worker { 17*f6dc9357SAndroid Build Coastguard Worker protected: 18*f6dc9357SAndroid Build Coastguard Worker Byte *_bufs[BCJ2_NUM_STREAMS + 1]; 19*f6dc9357SAndroid Build Coastguard Worker UInt32 _bufsSizes[BCJ2_NUM_STREAMS + 1]; 20*f6dc9357SAndroid Build Coastguard Worker UInt32 _bufsSizes_New[BCJ2_NUM_STREAMS + 1]; 21*f6dc9357SAndroid Build Coastguard Worker 22*f6dc9357SAndroid Build Coastguard Worker HRESULT Alloc(bool allocForOrig = true); 23*f6dc9357SAndroid Build Coastguard Worker public: 24*f6dc9357SAndroid Build Coastguard Worker CBaseCoder(); 25*f6dc9357SAndroid Build Coastguard Worker ~CBaseCoder(); 26*f6dc9357SAndroid Build Coastguard Worker }; 27*f6dc9357SAndroid Build Coastguard Worker 28*f6dc9357SAndroid Build Coastguard Worker 29*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_EXTRACT_ONLY 30*f6dc9357SAndroid Build Coastguard Worker 31*f6dc9357SAndroid Build Coastguard Worker class CEncoder Z7_final: 32*f6dc9357SAndroid Build Coastguard Worker public ICompressCoder2, 33*f6dc9357SAndroid Build Coastguard Worker public ICompressSetCoderProperties, 34*f6dc9357SAndroid Build Coastguard Worker public ICompressSetBufSize, 35*f6dc9357SAndroid Build Coastguard Worker public CMyUnknownImp, 36*f6dc9357SAndroid Build Coastguard Worker public CBaseCoder 37*f6dc9357SAndroid Build Coastguard Worker { 38*f6dc9357SAndroid Build Coastguard Worker Z7_IFACES_IMP_UNK_3( 39*f6dc9357SAndroid Build Coastguard Worker ICompressCoder2, 40*f6dc9357SAndroid Build Coastguard Worker ICompressSetCoderProperties, 41*f6dc9357SAndroid Build Coastguard Worker ICompressSetBufSize) 42*f6dc9357SAndroid Build Coastguard Worker 43*f6dc9357SAndroid Build Coastguard Worker UInt32 _relatLim; 44*f6dc9357SAndroid Build Coastguard Worker // UInt32 _excludeRangeBits; 45*f6dc9357SAndroid Build Coastguard Worker 46*f6dc9357SAndroid Build Coastguard Worker HRESULT CodeReal( 47*f6dc9357SAndroid Build Coastguard Worker ISequentialInStream * const *inStreams, const UInt64 * const *inSizes, UInt32 numInStreams, 48*f6dc9357SAndroid Build Coastguard Worker ISequentialOutStream * const *outStreams, const UInt64 * const *outSizes, UInt32 numOutStreams, 49*f6dc9357SAndroid Build Coastguard Worker ICompressProgressInfo *progress); 50*f6dc9357SAndroid Build Coastguard Worker public: 51*f6dc9357SAndroid Build Coastguard Worker CEncoder(); 52*f6dc9357SAndroid Build Coastguard Worker ~CEncoder(); 53*f6dc9357SAndroid Build Coastguard Worker }; 54*f6dc9357SAndroid Build Coastguard Worker 55*f6dc9357SAndroid Build Coastguard Worker #endif 56*f6dc9357SAndroid Build Coastguard Worker 57*f6dc9357SAndroid Build Coastguard Worker 58*f6dc9357SAndroid Build Coastguard Worker 59*f6dc9357SAndroid Build Coastguard Worker class CBaseDecoder: public CBaseCoder 60*f6dc9357SAndroid Build Coastguard Worker { 61*f6dc9357SAndroid Build Coastguard Worker protected: 62*f6dc9357SAndroid Build Coastguard Worker HRESULT _readRes[BCJ2_NUM_STREAMS]; 63*f6dc9357SAndroid Build Coastguard Worker unsigned _extraSizes[BCJ2_NUM_STREAMS]; 64*f6dc9357SAndroid Build Coastguard Worker UInt64 _readSizes[BCJ2_NUM_STREAMS]; 65*f6dc9357SAndroid Build Coastguard Worker 66*f6dc9357SAndroid Build Coastguard Worker CBcj2Dec dec; 67*f6dc9357SAndroid Build Coastguard Worker GetProcessedSize_ForInStream(unsigned i)68*f6dc9357SAndroid Build Coastguard Worker UInt64 GetProcessedSize_ForInStream(unsigned i) const 69*f6dc9357SAndroid Build Coastguard Worker { 70*f6dc9357SAndroid Build Coastguard Worker return _readSizes[i] - ((size_t)(dec.lims[i] - dec.bufs[i]) + _extraSizes[i]); 71*f6dc9357SAndroid Build Coastguard Worker } 72*f6dc9357SAndroid Build Coastguard Worker void InitCommon(); 73*f6dc9357SAndroid Build Coastguard Worker void ReadInStream(ISequentialInStream *inStream); 74*f6dc9357SAndroid Build Coastguard Worker }; 75*f6dc9357SAndroid Build Coastguard Worker 76*f6dc9357SAndroid Build Coastguard Worker 77*f6dc9357SAndroid Build Coastguard Worker class CDecoder Z7_final: 78*f6dc9357SAndroid Build Coastguard Worker public ICompressCoder2, 79*f6dc9357SAndroid Build Coastguard Worker public ICompressSetFinishMode, 80*f6dc9357SAndroid Build Coastguard Worker public ICompressGetInStreamProcessedSize2, 81*f6dc9357SAndroid Build Coastguard Worker public ICompressSetBufSize, 82*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_NO_READ_FROM_CODER 83*f6dc9357SAndroid Build Coastguard Worker public ICompressSetInStream2, 84*f6dc9357SAndroid Build Coastguard Worker public ICompressSetOutStreamSize, 85*f6dc9357SAndroid Build Coastguard Worker public ISequentialInStream, 86*f6dc9357SAndroid Build Coastguard Worker #endif 87*f6dc9357SAndroid Build Coastguard Worker public CMyUnknownImp, 88*f6dc9357SAndroid Build Coastguard Worker public CBaseDecoder 89*f6dc9357SAndroid Build Coastguard Worker { 90*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_BEGIN2(ICompressCoder2) 91*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(ICompressSetFinishMode) 92*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(ICompressGetInStreamProcessedSize2) 93*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(ICompressSetBufSize) 94*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_NO_READ_FROM_CODER 95*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(ICompressSetInStream2) 96*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(ICompressSetOutStreamSize) 97*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(ISequentialInStream) 98*f6dc9357SAndroid Build Coastguard Worker #endif 99*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_END 100*f6dc9357SAndroid Build Coastguard Worker Z7_COM_ADDREF_RELEASE 101*f6dc9357SAndroid Build Coastguard Worker 102*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(ICompressCoder2) 103*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(ICompressSetFinishMode) 104*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(ICompressGetInStreamProcessedSize2) 105*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(ICompressSetBufSize) 106*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_NO_READ_FROM_CODER 107*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(ICompressSetInStream2) 108*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(ICompressSetOutStreamSize) 109*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(ISequentialInStream) 110*f6dc9357SAndroid Build Coastguard Worker #endif 111*f6dc9357SAndroid Build Coastguard Worker 112*f6dc9357SAndroid Build Coastguard Worker bool _finishMode; 113*f6dc9357SAndroid Build Coastguard Worker 114*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_NO_READ_FROM_CODER 115*f6dc9357SAndroid Build Coastguard Worker bool _outSizeDefined; 116*f6dc9357SAndroid Build Coastguard Worker UInt64 _outSize; 117*f6dc9357SAndroid Build Coastguard Worker UInt64 _outSize_Processed; 118*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<ISequentialInStream> _inStreams[BCJ2_NUM_STREAMS]; 119*f6dc9357SAndroid Build Coastguard Worker #endif 120*f6dc9357SAndroid Build Coastguard Worker 121*f6dc9357SAndroid Build Coastguard Worker public: 122*f6dc9357SAndroid Build Coastguard Worker CDecoder(); 123*f6dc9357SAndroid Build Coastguard Worker }; 124*f6dc9357SAndroid Build Coastguard Worker 125*f6dc9357SAndroid Build Coastguard Worker }} 126*f6dc9357SAndroid Build Coastguard Worker 127*f6dc9357SAndroid Build Coastguard Worker #endif 128