misc/libphysfs/lzma/CPP/7zip/Common/RegisterCodec.h
branchui-scaling
changeset 15283 c4fd2813b127
parent 13390 0135e64c6c66
parent 15279 7ab5cf405686
child 15663 d92eeb468dad
equal deleted inserted replaced
13390:0135e64c6c66 15283:c4fd2813b127
     1 // RegisterCodec.h
       
     2 
       
     3 #ifndef __REGISTERCODEC_H
       
     4 #define __REGISTERCODEC_H
       
     5 
       
     6 #include "../Common/MethodId.h"
       
     7 
       
     8 typedef void * (*CreateCodecP)();
       
     9 struct CCodecInfo
       
    10 {
       
    11   CreateCodecP CreateDecoder;
       
    12   CreateCodecP CreateEncoder;
       
    13   CMethodId Id;
       
    14   const wchar_t *Name;
       
    15   UInt32 NumInStreams;
       
    16   bool IsFilter;
       
    17 };
       
    18 
       
    19 void RegisterCodec(const CCodecInfo *codecInfo);
       
    20 
       
    21 #define REGISTER_CODEC_NAME(x) CRegisterCodec ## x 
       
    22 
       
    23 #define REGISTER_CODEC(x) struct REGISTER_CODEC_NAME(x) { \
       
    24     REGISTER_CODEC_NAME(x)() { RegisterCodec(&g_CodecInfo); }}; \
       
    25     static REGISTER_CODEC_NAME(x) g_RegisterCodec;
       
    26 
       
    27 #define REGISTER_CODECS_NAME(x) CRegisterCodecs ## x 
       
    28 #define REGISTER_CODECS(x) struct REGISTER_CODECS_NAME(x) { \
       
    29     REGISTER_CODECS_NAME(x)() { for (int i = 0; i < sizeof(g_CodecsInfo) / sizeof(g_CodecsInfo[0]); i++) \
       
    30     RegisterCodec(&g_CodecsInfo[i]); }}; \
       
    31     static REGISTER_CODECS_NAME(x) g_RegisterCodecs;
       
    32 
       
    33 #endif