1// BranchCoder.h 2 3#ifndef __COMPRESS_BRANCH_CODER_H 4#define __COMPRESS_BRANCH_CODER_H 5 6#include "../../Common/MyCom.h" 7 8#include "../ICoder.h" 9 10class CBranchConverter: 11 public ICompressFilter, 12 public CMyUnknownImp 13{ 14protected: 15 UInt32 _bufferPos; 16 virtual void SubInit() {} 17 virtual UInt32 SubFilter(Byte *data, UInt32 size) = 0; 18public: 19 MY_UNKNOWN_IMP; 20 STDMETHOD(Init)(); 21 STDMETHOD_(UInt32, Filter)(Byte *data, UInt32 size); 22}; 23 24#define MyClassEncoderA(Name) class C ## Name: public CBranchConverter \ 25 { public: UInt32 SubFilter(Byte *data, UInt32 size); }; 26 27#define MyClassDecoderA(Name) class C ## Name: public CBranchConverter \ 28 { public: UInt32 SubFilter(Byte *data, UInt32 size); }; 29 30#define MyClassEncoderB(Name, ADD_ITEMS, ADD_INIT) class C ## Name: public CBranchConverter, public ADD_ITEMS \ 31 { public: UInt32 SubFilter(Byte *data, UInt32 size); ADD_INIT}; 32 33#define MyClassDecoderB(Name, ADD_ITEMS, ADD_INIT) class C ## Name: public CBranchConverter, public ADD_ITEMS \ 34 { public: UInt32 SubFilter(Byte *data, UInt32 size); ADD_INIT}; 35 36#define MyClassA(Name, id, subId) \ 37MyClassEncoderA(Name ## _Encoder) \ 38MyClassDecoderA(Name ## _Decoder) 39 40#define MyClassB(Name, id, subId, ADD_ITEMS, ADD_INIT) \ 41MyClassEncoderB(Name ## _Encoder, ADD_ITEMS, ADD_INIT) \ 42MyClassDecoderB(Name ## _Decoder, ADD_ITEMS, ADD_INIT) 43 44#endif 45