rlm@1: // BranchCoder.h rlm@1: rlm@1: #ifndef __COMPRESS_BRANCH_CODER_H rlm@1: #define __COMPRESS_BRANCH_CODER_H rlm@1: rlm@1: #include "../../Common/MyCom.h" rlm@1: rlm@1: #include "../ICoder.h" rlm@1: rlm@1: class CBranchConverter: rlm@1: public ICompressFilter, rlm@1: public CMyUnknownImp rlm@1: { rlm@1: protected: rlm@1: UInt32 _bufferPos; rlm@1: virtual void SubInit() {} rlm@1: virtual UInt32 SubFilter(Byte *data, UInt32 size) = 0; rlm@1: public: rlm@1: MY_UNKNOWN_IMP; rlm@1: STDMETHOD(Init)(); rlm@1: STDMETHOD_(UInt32, Filter)(Byte *data, UInt32 size); rlm@1: }; rlm@1: rlm@1: #define MyClassEncoderA(Name) class C ## Name: public CBranchConverter \ rlm@1: { public: UInt32 SubFilter(Byte *data, UInt32 size); }; rlm@1: rlm@1: #define MyClassDecoderA(Name) class C ## Name: public CBranchConverter \ rlm@1: { public: UInt32 SubFilter(Byte *data, UInt32 size); }; rlm@1: rlm@1: #define MyClassEncoderB(Name, ADD_ITEMS, ADD_INIT) class C ## Name: public CBranchConverter, public ADD_ITEMS \ rlm@1: { public: UInt32 SubFilter(Byte *data, UInt32 size); ADD_INIT}; rlm@1: rlm@1: #define MyClassDecoderB(Name, ADD_ITEMS, ADD_INIT) class C ## Name: public CBranchConverter, public ADD_ITEMS \ rlm@1: { public: UInt32 SubFilter(Byte *data, UInt32 size); ADD_INIT}; rlm@1: rlm@1: #define MyClassA(Name, id, subId) \ rlm@1: MyClassEncoderA(Name ## _Encoder) \ rlm@1: MyClassDecoderA(Name ## _Decoder) rlm@1: rlm@1: #define MyClassB(Name, id, subId, ADD_ITEMS, ADD_INIT) \ rlm@1: MyClassEncoderB(Name ## _Encoder, ADD_ITEMS, ADD_INIT) \ rlm@1: MyClassDecoderB(Name ## _Decoder, ADD_ITEMS, ADD_INIT) rlm@1: rlm@1: #endif