BranchCoder.h 1.3 KB

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