Fri, 16 Jan 2015 18:13:44 +0100
Integrate suggestion from review to improve consistency with existing code.
1 // BranchCoder.h
3 #ifndef __BRANCH_CODER_H
4 #define __BRANCH_CODER_H
6 #include "Common/MyCom.h"
7 #include "Common/Types.h"
8 #include "Common/Alloc.h"
10 #include "../../ICoder.h"
12 class CBranchConverter:
13 public ICompressFilter,
14 public CMyUnknownImp
15 {
16 protected:
17 UInt32 _bufferPos;
18 virtual void SubInit() {}
19 virtual UInt32 SubFilter(Byte *data, UInt32 size) = 0;
20 public:
21 MY_UNKNOWN_IMP;
22 STDMETHOD(Init)();
23 STDMETHOD_(UInt32, Filter)(Byte *data, UInt32 size);
24 };
26 #define MyClassEncoderA(Name) class C ## Name: public CBranchConverter \
27 { public: UInt32 SubFilter(Byte *data, UInt32 size); };
29 #define MyClassDecoderA(Name) class C ## Name: public CBranchConverter \
30 { public: UInt32 SubFilter(Byte *data, UInt32 size); };
32 #define MyClassEncoderB(Name, ADD_ITEMS, ADD_INIT) class C ## Name: public CBranchConverter, public ADD_ITEMS \
33 { public: UInt32 SubFilter(Byte *data, UInt32 size); ADD_INIT};
35 #define MyClassDecoderB(Name, ADD_ITEMS, ADD_INIT) class C ## Name: public CBranchConverter, public ADD_ITEMS \
36 { public: UInt32 SubFilter(Byte *data, UInt32 size); ADD_INIT};
38 #define MyClass2b(Name, id, subId, encodingId) \
39 DEFINE_GUID(CLSID_CCompressConvert ## Name, \
40 0x23170F69, 0x40C1, 0x278B, 0x03, 0x03, id, subId, 0x00, 0x00, encodingId, 0x00);
42 #define MyClassA(Name, id, subId) \
43 MyClass2b(Name ## _Encoder, id, subId, 0x01) \
44 MyClassEncoderA(Name ## _Encoder) \
45 MyClass2b(Name ## _Decoder, id, subId, 0x00) \
46 MyClassDecoderA(Name ## _Decoder)
48 #define MyClassB(Name, id, subId, ADD_ITEMS, ADD_INIT) \
49 MyClass2b(Name ## _Encoder, id, subId, 0x01) \
50 MyClassEncoderB(Name ## _Encoder, ADD_ITEMS, ADD_INIT) \
51 MyClass2b(Name ## _Decoder, id, subId, 0x00) \
52 MyClassDecoderB(Name ## _Decoder, ADD_ITEMS, ADD_INIT)
54 #endif