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