libebml: add macros to simplify the EBML class item definitions (ID, ClassInfo, SemanticContext)
git-svn-id: https://matroska.svn.sourceforge.net/svnroot/matroska/trunk/libebml@66 a6f86f6d-0131-4f8e-9e7b-e335508773d5
This commit is contained in:
parent
0b3faddd90
commit
91b9d8cc7e
@ -50,8 +50,9 @@ extern const EbmlSemanticContext EBML_DLL_API EDocType_Context;
|
||||
extern const EbmlSemanticContext EBML_DLL_API EDocTypeVersion_Context;
|
||||
extern const EbmlSemanticContext EBML_DLL_API EDocTypeReadVersion_Context;
|
||||
|
||||
#define Context_EbmlHead EbmlHead_Context
|
||||
|
||||
// global elements
|
||||
extern const EbmlSemanticContext EBML_DLL_API EbmlVoid_Context;
|
||||
extern const EbmlSemanticContext EBML_DLL_API & GetEbmlGlobal_Context();
|
||||
|
||||
END_LIBEBML_NAMESPACE
|
||||
|
@ -78,6 +78,8 @@ class EbmlStream;
|
||||
class EbmlSemanticContext;
|
||||
class EbmlElement;
|
||||
|
||||
extern const EbmlSemanticContext Context_EbmlGlobal;
|
||||
|
||||
#if defined(EBML_STRICT_API)
|
||||
#define EBML_CONCRETE_CLASS(Type) \
|
||||
public: \
|
||||
@ -92,6 +94,38 @@ class EbmlElement;
|
||||
private: \
|
||||
static const EbmlCallbacks ClassInfos; \
|
||||
|
||||
|
||||
#define DEFINE_xxx_MASTER(x,id,idl,parent,name,global) \
|
||||
const EbmlId Id_##x (id, idl); \
|
||||
const EbmlSemanticContext Context_##x = EbmlSemanticContext(countof(ContextList_##x), ContextList_##x, &Context_##parent, global, &EBML_INFO(x)); \
|
||||
const EbmlCallbacks x::ClassInfos(x::Create, Id_##x, name, Context_##x); \
|
||||
|
||||
#define DEFINE_xxx_MASTER_GLOBAL(x,id,idl,name,global) \
|
||||
const EbmlId Id_##x (id, idl); \
|
||||
const EbmlSemanticContext Context_##x = EbmlSemanticContext(countof(ContextList_##x), ContextList_##x, NULL, global, &EBML_INFO(x)); \
|
||||
const EbmlCallbacks x::ClassInfos(x::Create, Id_##x, name, Context_##x); \
|
||||
|
||||
#define DEFINE_xxx_CLASS(x,id,idl,parent,name,global) \
|
||||
const EbmlId Id_##x (id, idl); \
|
||||
const EbmlSemanticContext Context_##x = EbmlSemanticContext(0, NULL, &Context_##parent, global, &EBML_INFO(x)); \
|
||||
const EbmlCallbacks x::ClassInfos(x::Create, Id_##x, name, Context_##x); \
|
||||
|
||||
#define DEFINE_xxx_CLASS_GLOBAL(x,id,idl,name,global) \
|
||||
const EbmlId Id_##x (id, idl); \
|
||||
const EbmlCallbacks x::ClassInfos(x::Create, Id_##x, name, Context_EbmlGlobal); \
|
||||
|
||||
#define DEFINE_xxx_CLASS_ORPHAN(x,id,idl,name,global) \
|
||||
const EbmlId Id_##x (id, idl); \
|
||||
const EbmlSemanticContext Context_##x = EbmlSemanticContext(0, NULL, NULL, global, &EBML_INFO(x)); \
|
||||
const EbmlCallbacks x::ClassInfos(x::Create, Id_##x, name, Context_##x); \
|
||||
|
||||
#define DEFINE_EBML_MASTER(x,id,idl,parent,name) DEFINE_xxx_MASTER(x,id,idl,parent,name,*GetEbmlGlobal_Context)
|
||||
#define DEFINE_EBML_MASTER_GLOBAL(x,id,idl,name) DEFINE_xxx_MASTER_GLOBAL(x,id,idl,name,*GetEbmlGlobal_Context)
|
||||
#define DEFINE_EBML_CLASS(x,id,idl,parent,name) DEFINE_xxx_CLASS(x,id,idl,parent,name,*GetEbmlGlobal_Context)
|
||||
#define DEFINE_EBML_CLASS_GLOBAL(x,id,idl,name) DEFINE_xxx_CLASS_GLOBAL(x,id,idl,name,*GetEbmlGlobal_Context)
|
||||
#define DEFINE_EBML_CLASS_ORPHAN(x,id,idl,name) DEFINE_xxx_CLASS_ORPHAN(x,id,idl,name,*GetEbmlGlobal_Context)
|
||||
|
||||
|
||||
#define EBML_INFO(ref) ref::ClassInfo()
|
||||
#define EBML_ID(ref) ref::ClassId()
|
||||
#define EBML_CONTEXT(e) (e)->Context()
|
||||
|
@ -39,13 +39,13 @@
|
||||
|
||||
START_LIBEBML_NAMESPACE
|
||||
|
||||
const EbmlSemantic EbmlGlobal_ContextList[2] =
|
||||
static const EbmlSemantic EbmlGlobal_ContextList[2] =
|
||||
{
|
||||
EbmlSemantic(false, false, EBML_INFO(EbmlCrc32)), ///< EbmlCrc32
|
||||
EbmlSemantic(false, false, EBML_INFO(EbmlVoid)), ///< EbmlVoid
|
||||
};
|
||||
|
||||
const EbmlSemanticContext EbmlVoid_Context = EbmlSemanticContext(0, NULL, NULL, *GetEbmlGlobal_Context, NULL);
|
||||
const EbmlSemanticContext Context_EbmlGlobal = EbmlSemanticContext(0, NULL, NULL, *GetEbmlGlobal_Context, NULL);
|
||||
|
||||
static const EbmlSemanticContext EbmlGlobal_Context = EbmlSemanticContext(countof(EbmlGlobal_ContextList), EbmlGlobal_ContextList, NULL, *GetEbmlGlobal_Context, NULL);
|
||||
|
||||
|
@ -40,8 +40,7 @@
|
||||
|
||||
START_LIBEBML_NAMESPACE
|
||||
|
||||
EbmlId EbmlCrc32_TheId(0xBF, 1);
|
||||
const EbmlCallbacks EbmlCrc32::ClassInfos(EbmlCrc32::Create, EbmlCrc32_TheId, "EBMLCrc32\0ratamadabapa", EbmlVoid_Context);
|
||||
DEFINE_EBML_CLASS_GLOBAL(EbmlCrc32, 0xBF, 1, "EBMLCrc32\0ratamadabapa");
|
||||
|
||||
const uint32 EbmlCrc32::m_tab[] = {
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
|
@ -38,8 +38,8 @@
|
||||
|
||||
START_LIBEBML_NAMESPACE
|
||||
|
||||
const EbmlId EbmlDummy::DummyRawId(0xFF, 1);
|
||||
const EbmlSemanticContext EbmlDummy_Context = EbmlSemanticContext(0, NULL, NULL, *GetEbmlGlobal_Context, &EBML_INFO(EbmlDummy));
|
||||
const EbmlCallbacks EbmlDummy::ClassInfos(NULL, DummyRawId, "DummyElement", EbmlDummy_Context);
|
||||
DEFINE_EBML_CLASS_ORPHAN(EbmlDummy, 0xFF, 1, "DummyElement");
|
||||
|
||||
const EbmlId EbmlDummy::DummyRawId = Id_EbmlDummy;
|
||||
|
||||
END_LIBEBML_NAMESPACE
|
||||
|
@ -39,7 +39,7 @@
|
||||
|
||||
START_LIBEBML_NAMESPACE
|
||||
|
||||
const EbmlSemantic EbmlHead_ContextList[] =
|
||||
static const EbmlSemantic ContextList_EbmlHead[7] =
|
||||
{
|
||||
EbmlSemantic(true, true, EBML_INFO(EVersion)), ///< EBMLVersion
|
||||
EbmlSemantic(true, true, EBML_INFO(EReadVersion)), ///< EBMLReadVersion
|
||||
@ -50,10 +50,7 @@ const EbmlSemantic EbmlHead_ContextList[] =
|
||||
EbmlSemantic(true, true, EBML_INFO(EDocTypeReadVersion)), ///< DocTypeReadVersion
|
||||
};
|
||||
|
||||
const EbmlSemanticContext EbmlHead_Context = EbmlSemanticContext(countof(EbmlHead_ContextList), EbmlHead_ContextList, NULL, *GetEbmlGlobal_Context, &EBML_INFO(EbmlHead));
|
||||
|
||||
EbmlId EbmlHead_TheId(0x1A45DFA3, 4);
|
||||
const EbmlCallbacks EbmlHead::ClassInfos(EbmlHead::Create, EbmlHead_TheId, "EBMLHead\0ratamapaga", EbmlHead_Context);
|
||||
DEFINE_EBML_MASTER_GLOBAL(EbmlHead, 0x1A45DFA3, 4, "EBMLHead\0ratamapaga");
|
||||
|
||||
EbmlHead::EbmlHead()
|
||||
:EbmlMaster(EbmlHead_Context)
|
||||
|
@ -38,28 +38,12 @@
|
||||
|
||||
START_LIBEBML_NAMESPACE
|
||||
|
||||
EbmlId EVersion_TheId (0x4286, 2);
|
||||
EbmlId EReadVersion_TheId (0x42F7, 2);
|
||||
EbmlId EMaxIdLength_TheId (0x42F2, 2);
|
||||
EbmlId EMaxSizeLength_TheId (0x42F3, 2);
|
||||
EbmlId EDocType_TheId (0x4282, 2);
|
||||
EbmlId EDocTypeVersion_TheId (0x4287, 2);
|
||||
EbmlId EDocTypeReadVersion_TheId (0x4285, 2);
|
||||
|
||||
const EbmlCallbacks EVersion::ClassInfos(EVersion::Create, EVersion_TheId, "EBMLVersion", EVersion_Context);
|
||||
const EbmlCallbacks EReadVersion::ClassInfos(EReadVersion::Create, EReadVersion_TheId, "EBMLReadVersion", EReadVersion_Context);
|
||||
const EbmlCallbacks EMaxIdLength::ClassInfos(EMaxIdLength::Create, EMaxIdLength_TheId, "EBMLMaxIdLength", EMaxIdLength_Context);
|
||||
const EbmlCallbacks EMaxSizeLength::ClassInfos(EMaxSizeLength::Create, EMaxSizeLength_TheId, "EBMLMaxSizeLength", EMaxSizeLength_Context);
|
||||
const EbmlCallbacks EDocType::ClassInfos(EDocType::Create, EDocType_TheId, "EBMLDocType", EDocType_Context);
|
||||
const EbmlCallbacks EDocTypeVersion::ClassInfos(EDocTypeVersion::Create, EDocTypeVersion_TheId, "EBMLDocTypeVersion", EDocTypeVersion_Context);
|
||||
const EbmlCallbacks EDocTypeReadVersion::ClassInfos(EDocTypeReadVersion::Create, EDocTypeReadVersion_TheId, "EBMLDocTypeReadVersion", EDocTypeReadVersion_Context);
|
||||
|
||||
const EbmlSemanticContext EVersion_Context = EbmlSemanticContext(0, NULL, &EbmlHead_Context, *GetEbmlGlobal_Context, &EBML_INFO(EVersion));
|
||||
const EbmlSemanticContext EReadVersion_Context = EbmlSemanticContext(0, NULL, &EbmlHead_Context, *GetEbmlGlobal_Context, &EBML_INFO(EReadVersion));
|
||||
const EbmlSemanticContext EMaxIdLength_Context = EbmlSemanticContext(0, NULL, &EbmlHead_Context, *GetEbmlGlobal_Context, &EBML_INFO(EMaxIdLength));
|
||||
const EbmlSemanticContext EMaxSizeLength_Context = EbmlSemanticContext(0, NULL, &EbmlHead_Context, *GetEbmlGlobal_Context, &EBML_INFO(EMaxSizeLength));
|
||||
const EbmlSemanticContext EDocType_Context = EbmlSemanticContext(0, NULL, &EbmlHead_Context, *GetEbmlGlobal_Context, &EBML_INFO(EDocType));
|
||||
const EbmlSemanticContext EDocTypeVersion_Context = EbmlSemanticContext(0, NULL, &EbmlHead_Context, *GetEbmlGlobal_Context, &EBML_INFO(EDocTypeVersion));
|
||||
const EbmlSemanticContext EDocTypeReadVersion_Context = EbmlSemanticContext(0, NULL, &EbmlHead_Context, *GetEbmlGlobal_Context, &EBML_INFO(EDocTypeReadVersion));
|
||||
DEFINE_EBML_CLASS(EVersion, 0x4286, 2, EbmlHead, "EBMLVersion");
|
||||
DEFINE_EBML_CLASS(EReadVersion, 0x42F7, 2, EbmlHead, "EBMLReadVersion");
|
||||
DEFINE_EBML_CLASS(EMaxIdLength, 0x42F2, 2, EbmlHead, "EBMLMaxIdLength");
|
||||
DEFINE_EBML_CLASS(EMaxSizeLength, 0x42F3, 2, EbmlHead, "EBMLMaxSizeLength");
|
||||
DEFINE_EBML_CLASS(EDocType, 0x4282, 2, EbmlHead, "EBMLDocType");
|
||||
DEFINE_EBML_CLASS(EDocTypeVersion, 0x4287, 2, EbmlHead, "EBMLDocTypeVersion");
|
||||
DEFINE_EBML_CLASS(EDocTypeReadVersion, 0x4285, 2, EbmlHead, "EBMLDocTypeReadVersion");
|
||||
|
||||
END_LIBEBML_NAMESPACE
|
||||
|
@ -38,8 +38,7 @@
|
||||
|
||||
START_LIBEBML_NAMESPACE
|
||||
|
||||
EbmlId EbmlVoid_TheId(0xEC, 1);
|
||||
const EbmlCallbacks EbmlVoid::ClassInfos(EbmlVoid::Create, EbmlVoid_TheId, "EBMLVoid", EbmlVoid_Context);
|
||||
DEFINE_EBML_CLASS_GLOBAL(EbmlVoid, 0xEC, 1, "EBMLVoid");
|
||||
|
||||
EbmlVoid::EbmlVoid()
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user