Home | History | Annotate | Download | only in Compress
      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 
     10 class CBranchConverter:
     11   public ICompressFilter,
     12   public CMyUnknownImp
     13 {
     14 protected:
     15   UInt32 _bufferPos;
     16   virtual void SubInit() {}
     17   virtual UInt32 SubFilter(Byte *data, UInt32 size) = 0;
     18 public:
     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)  \
     37 MyClassEncoderA(Name ## _Encoder) \
     38 MyClassDecoderA(Name ## _Decoder)
     39 
     40 #define MyClassB(Name, id, subId, ADD_ITEMS, ADD_INIT)  \
     41 MyClassEncoderB(Name ## _Encoder, ADD_ITEMS, ADD_INIT) \
     42 MyClassDecoderB(Name ## _Decoder, ADD_ITEMS, ADD_INIT)
     43 
     44 #endif
     45