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