]> granicus.if.org Git - libmatroska/commitdiff
add a macro to define all the pure virtual methods in a "concrete" EBML class (that...
authorSteve Lhomme <slhomme@matroska.org>
Mon, 15 Mar 2010 16:11:24 +0000 (16:11 +0000)
committerSteve Lhomme <slhomme@matroska.org>
Mon, 15 Mar 2010 16:11:24 +0000 (16:11 +0000)
git-svn-id: https://matroska.svn.sourceforge.net/svnroot/matroska/trunk/libmatroska@16 a6f86f6d-0131-4f8e-9e7b-e335508773d5

21 files changed:
matroska/KaxAttached.h
matroska/KaxAttachments.h
matroska/KaxBlock.h
matroska/KaxBlockData.h
matroska/KaxChapters.h
matroska/KaxCluster.h
matroska/KaxClusterData.h
matroska/KaxContentEncoding.h
matroska/KaxCues.h
matroska/KaxCuesData.h
matroska/KaxInfo.h
matroska/KaxInfoData.h
matroska/KaxSeekHead.h
matroska/KaxSegment.h
matroska/KaxTag.h
matroska/KaxTagMulti.h
matroska/KaxTags.h
matroska/KaxTrackAudio.h
matroska/KaxTrackEntryData.h
matroska/KaxTrackVideo.h
matroska/KaxTracks.h

index 26c40f8601b04554827ff077ef9d17cf8d85b96d..e2a1743884c2be1238b9d83a3007e8725145d6f7 100644 (file)
@@ -50,91 +50,59 @@ class MATROSKA_DLL_API KaxAttached : public EbmlMaster {
        public:
                KaxAttached();
                KaxAttached(const KaxAttached & ElementToClone) : EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxAttached);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               bool IsYourId(const EbmlId & TestId) const;
-               EbmlElement * Clone() const {return new KaxAttached(*this);}
+        
+        EBML_CONCRETE_CLASS(KaxAttached)
 };
 
 class MATROSKA_DLL_API KaxFileDescription : public EbmlUnicodeString {
        public:
                KaxFileDescription() {}
                KaxFileDescription(const KaxFileDescription & ElementToClone) : EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxFileDescription);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               bool IsYourId(const EbmlId & TestId) const;
-               EbmlElement * Clone() const {return new KaxFileDescription(*this);}
+        
+        EBML_CONCRETE_CLASS(KaxFileDescription)
 };
 
 class MATROSKA_DLL_API KaxFileName : public EbmlUnicodeString {
        public:
                KaxFileName() {}
                KaxFileName(const KaxFileName & ElementToClone) : EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxFileName);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               bool IsYourId(const EbmlId & TestId) const;
-               EbmlElement * Clone() const {return new KaxFileName(*this);}
+        
+        EBML_CONCRETE_CLASS(KaxFileName)
 };
 
 class MATROSKA_DLL_API KaxMimeType : public EbmlString {
        public:
                KaxMimeType() {}
                KaxMimeType(const KaxMimeType & ElementToClone) : EbmlString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxMimeType);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               bool IsYourId(const EbmlId & TestId) const;
-               EbmlElement * Clone() const {return new KaxMimeType(*this);}
+        
+        EBML_CONCRETE_CLASS(KaxMimeType)
 };
 
 class MATROSKA_DLL_API KaxFileData : public EbmlBinary {
        public:
                KaxFileData() {}
                KaxFileData(const KaxFileData & ElementToClone) :EbmlBinary(ElementToClone){}
-               static EbmlElement & Create() {return *(new KaxFileData);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
+       
                bool ValidateSize() const {return true;} // we don't mind about what's inside
-               static const EbmlCallbacks ClassInfos;
-
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               bool IsYourId(const EbmlId & TestId) const;
-               EbmlElement * Clone() const {return new KaxFileData(*this);}
+               
+        EBML_CONCRETE_CLASS(KaxFileData)
 };
 
 class MATROSKA_DLL_API KaxFileReferral : public EbmlBinary {
        public:
                KaxFileReferral() {}
                KaxFileReferral(const KaxFileReferral & ElementToClone) :EbmlBinary(ElementToClone){}
-               static EbmlElement & Create() {return *(new KaxFileReferral);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
                bool ValidateSize() const {return true;} // we don't mind about what's inside
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxFileReferral(*this);}
+               
+        EBML_CONCRETE_CLASS(KaxFileReferral)
 };
 
 class MATROSKA_DLL_API KaxFileUID : public EbmlUInteger {
        public:
                KaxFileUID() {}
                KaxFileUID(const KaxFileUID & ElementToClone) : EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxFileUID);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               bool IsYourId(const EbmlId & TestId) const;
-               EbmlElement * Clone() const {return new KaxFileUID(*this);}
+        
+        EBML_CONCRETE_CLASS(KaxFileUID)
 };
 
 END_LIBMATROSKA_NAMESPACE
index ead8cb16e44ef7eaf718d53f673ce1bb1b1d593e..aded54e3a0ed0ab3111969e97d802945bd4c116b 100644 (file)
@@ -46,11 +46,8 @@ class MATROSKA_DLL_API KaxAttachments : public EbmlMaster {
        public:
                KaxAttachments();
                KaxAttachments(const KaxAttachments & ElementToClone) : EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxAttachments);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxAttachments(*this);}
+        
+        EBML_CONCRETE_CLASS(KaxAttachments)
 };
 
 END_LIBMATROSKA_NAMESPACE
index f114992c60b846534ee03ca1385a37d1ed3b5daa..f48c47292b0d7354e25687a906ee4cd0527566f4 100644 (file)
@@ -126,11 +126,6 @@ class MATROSKA_DLL_API KaxBlockGroup : public EbmlMaster {
        public:
                KaxBlockGroup();
                KaxBlockGroup(const KaxBlockGroup & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxBlockGroup);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxBlockGroup(*this);}
 
                ~KaxBlockGroup();
 
@@ -192,6 +187,8 @@ class MATROSKA_DLL_API KaxBlockGroup : public EbmlMaster {
        protected:
                KaxCluster * ParentCluster;
                const KaxTrackEntry * ParentTrack;
+        
+        EBML_CONCRETE_CLASS(KaxBlockGroup)
 };
 
 class KaxInternalBlock : public EbmlBinary {
@@ -278,22 +275,14 @@ class KaxInternalBlock : public EbmlBinary {
 class MATROSKA_DLL_API KaxBlock : public KaxInternalBlock {
        public:
                KaxBlock() :KaxInternalBlock(false) {}
-               static EbmlElement & Create() {return *(new KaxBlock);}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               EbmlElement * Clone() const {return new KaxBlock(*this);}
+        
+        EBML_CONCRETE_CLASS(KaxBlock)
 };
 
 #if MATROSKA_VERSION >= 2
 class MATROSKA_DLL_API KaxSimpleBlock : public KaxInternalBlock {
        public:
                KaxSimpleBlock() :KaxInternalBlock(true) {}
-               static EbmlElement & Create() {return *(new KaxSimpleBlock);}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               EbmlElement * Clone() const {return new KaxSimpleBlock(*this);}
 
                void SetKeyframe(bool b_keyframe) { bIsKeyframe = b_keyframe; }
                void SetDiscardable(bool b_discard) { bIsDiscardable = b_discard; }
@@ -302,6 +291,8 @@ class MATROSKA_DLL_API KaxSimpleBlock : public KaxInternalBlock {
                bool IsDiscardable() const { return bIsDiscardable; }
 
                operator KaxInternalBlock &() { return *this; }
+        
+        EBML_CONCRETE_CLASS(KaxSimpleBlock)
 };
 #endif // MATROSKA_VERSION
 
@@ -355,11 +346,8 @@ class MATROSKA_DLL_API KaxBlockDuration : public EbmlUInteger {
        public:
                KaxBlockDuration() {}
                KaxBlockDuration(const KaxBlockDuration & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxBlockDuration);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxBlockDuration(*this);}
+        
+        EBML_CONCRETE_CLASS(KaxBlockDuration)
 };
 
 #if MATROSKA_VERSION >= 2
@@ -367,10 +355,6 @@ class MATROSKA_DLL_API KaxBlockVirtual : public EbmlBinary {
        public:
                KaxBlockVirtual() :ParentCluster(NULL) {SetBuffer(DataBlock,sizeof(DataBlock)); SetValueIsSet(false);}
                KaxBlockVirtual(const KaxBlockVirtual & ElementToClone);
-               static EbmlElement & Create() {return *(new KaxBlockVirtual);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
                bool ValidateSize() const {return true;}
 
                /*!
@@ -380,14 +364,14 @@ class MATROSKA_DLL_API KaxBlockVirtual : public EbmlBinary {
 
                void SetParent(const KaxCluster & aParentCluster) {ParentCluster = &aParentCluster;}
 
-               EbmlElement * Clone() const {return new KaxBlockVirtual(*this);}
-
        protected:
                uint64 Timecode; // temporary timecode of the first frame if there are more than one
                uint16 TrackNumber;
                binary DataBlock[5];
 
                const KaxCluster * ParentCluster;
+        
+        EBML_CONCRETE_CLASS(KaxBlockVirtual)
 };
 #endif // MATROSKA_VERSION
 
@@ -395,59 +379,43 @@ class MATROSKA_DLL_API KaxBlockAdditional : public EbmlBinary {
        public:
                KaxBlockAdditional() {}
                KaxBlockAdditional(const KaxBlockAdditional & ElementToClone) :EbmlBinary(ElementToClone){}
-               static EbmlElement & Create() {return *(new KaxBlockAdditional);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               bool ValidateSize() const {return true;}
+        bool ValidateSize() const {return true;}
 
-               EbmlElement * Clone() const {return new KaxBlockAdditional(*this);}
+        EBML_CONCRETE_CLASS(KaxBlockAdditional)
 };
 
 class MATROSKA_DLL_API KaxBlockAdditions : public EbmlMaster {
        public:
                KaxBlockAdditions();
                KaxBlockAdditions(const KaxBlockAdditions & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxBlockAdditions);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxBlockAdditions(*this);}
+        
+        EBML_CONCRETE_CLASS(KaxBlockAdditions)
 };
 
 class MATROSKA_DLL_API KaxBlockMore : public EbmlMaster {
        public:
                KaxBlockMore();
                KaxBlockMore(const KaxBlockMore & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxBlockMore);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxBlockMore(*this);}
+        
+        EBML_CONCRETE_CLASS(KaxBlockMore)
 };
 
 class MATROSKA_DLL_API KaxBlockAddID : public EbmlUInteger {
        public:
                KaxBlockAddID() :EbmlUInteger(1) {}
                KaxBlockAddID(const KaxBlockAddID & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxBlockAddID);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxBlockAddID(*this);}
+        
+        EBML_CONCRETE_CLASS(KaxBlockAddID)
 };
 
 class MATROSKA_DLL_API KaxCodecState : public EbmlBinary {
        public:
                KaxCodecState() {}
                KaxCodecState(const KaxCodecState & ElementToClone) :EbmlBinary(ElementToClone){}
-               static EbmlElement & Create() {return *(new KaxCodecState);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               bool ValidateSize() const {return true;}
 
-               EbmlElement * Clone() const {return new KaxCodecState(*this);}
+        bool ValidateSize() const {return true;}
+
+        EBML_CONCRETE_CLASS(KaxCodecState)
 };
 
 END_LIBMATROSKA_NAMESPACE
index fc12312303d705a3d229a0b3287331204d006cc4..f2099930b58cb0c6f72eceb425bec69b3be51a08 100644 (file)
@@ -50,11 +50,8 @@ class MATROSKA_DLL_API KaxReferencePriority : public EbmlUInteger {
        public:
                KaxReferencePriority() :EbmlUInteger(0) {}
                KaxReferencePriority(const KaxReferencePriority & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxReferencePriority);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxReferencePriority(*this);}
+        
+        EBML_CONCRETE_CLASS(KaxReferencePriority)
 };
 
 /*!
@@ -64,11 +61,6 @@ class MATROSKA_DLL_API KaxReferenceBlock : public EbmlSInteger {
        public:
                KaxReferenceBlock() :RefdBlock(NULL), ParentBlock(NULL) {bTimecodeSet = false;}
                KaxReferenceBlock(const KaxReferenceBlock & ElementToClone) :EbmlSInteger(ElementToClone), bTimecodeSet(ElementToClone.bTimecodeSet) {}
-               static EbmlElement & Create() {return *(new KaxReferenceBlock);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxReferenceBlock(*this);}
                
                /*!
                        \brief override this method to compute the timecode value
@@ -85,6 +77,8 @@ class MATROSKA_DLL_API KaxReferenceBlock : public EbmlSInteger {
                const KaxBlockGroup * ParentBlock;
                void SetReferencedTimecode(int64 refTimecode) {*static_cast<EbmlSInteger*>(this) = refTimecode; bTimecodeSet = true;};
                bool bTimecodeSet;
+        
+        EBML_CONCRETE_CLASS(KaxReferenceBlock)
 };
 
 #if MATROSKA_VERSION >= 2
@@ -92,11 +86,8 @@ class MATROSKA_DLL_API KaxReferenceVirtual : public EbmlSInteger {
        public:
                KaxReferenceVirtual() {}
                KaxReferenceVirtual(const KaxReferenceVirtual & ElementToClone) :EbmlSInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxReferenceVirtual);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxReferenceVirtual(*this);}
+        
+        EBML_CONCRETE_CLASS(KaxReferenceVirtual)
 };
 #endif // MATROSKA_VERSION
 
@@ -104,77 +95,56 @@ class MATROSKA_DLL_API KaxTimeSlice : public EbmlMaster {
        public:
                KaxTimeSlice();
                KaxTimeSlice(const KaxTimeSlice & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTimeSlice);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTimeSlice(*this);}
+        
+        EBML_CONCRETE_CLASS(KaxTimeSlice)
 };
 
 class MATROSKA_DLL_API KaxSlices : public EbmlMaster {
        public:
                KaxSlices();
                KaxSlices(const KaxSlices & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxSlices);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxSlices(*this);}
+        
+        EBML_CONCRETE_CLASS(KaxSlices)
 };
 
 class MATROSKA_DLL_API KaxSliceLaceNumber : public EbmlUInteger {
        public:
                KaxSliceLaceNumber() :EbmlUInteger(0) {}
                KaxSliceLaceNumber(const KaxSliceLaceNumber & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxSliceLaceNumber);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxSliceLaceNumber(*this);}
+        
+        EBML_CONCRETE_CLASS(KaxSliceLaceNumber)
 };
 
 class MATROSKA_DLL_API KaxSliceFrameNumber : public EbmlUInteger {
        public:
                KaxSliceFrameNumber() :EbmlUInteger(0) {}
                KaxSliceFrameNumber(const KaxSliceFrameNumber & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxSliceFrameNumber);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxSliceFrameNumber(*this);}
+        
+        EBML_CONCRETE_CLASS(KaxSliceFrameNumber)
 };
 
 class MATROSKA_DLL_API KaxSliceBlockAddID : public EbmlUInteger {
        public:
                KaxSliceBlockAddID() :EbmlUInteger(0) {}
                KaxSliceBlockAddID(const KaxSliceBlockAddID & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxSliceBlockAddID);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxSliceBlockAddID(*this);}
+        
+        EBML_CONCRETE_CLASS(KaxSliceBlockAddID)
 };
 
 class MATROSKA_DLL_API KaxSliceDelay : public EbmlUInteger {
        public:
                KaxSliceDelay() :EbmlUInteger(0) {}
                KaxSliceDelay(const KaxSliceDelay & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxSliceDelay);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxSliceDelay(*this);}
+        
+        EBML_CONCRETE_CLASS(KaxSliceDelay)
 };
 
 class MATROSKA_DLL_API KaxSliceDuration : public EbmlUInteger {
        public:
                KaxSliceDuration() {}
                KaxSliceDuration(const KaxSliceDuration & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxSliceDuration);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxSliceDuration(*this);}
+        
+        EBML_CONCRETE_CLASS(KaxSliceDuration)
 };
 
 END_LIBMATROSKA_NAMESPACE
index 56474c059dc6d7555f31b5c2c8d6c0250e89fc7e..2c276978986ac1ec4bf1fa6466ee5a54019f0f19 100644 (file)
@@ -50,301 +50,220 @@ class MATROSKA_DLL_API KaxChapters : public EbmlMaster {
        public:
                KaxChapters();
                KaxChapters(const KaxChapters & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxChapters);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxChapters(*this);}
+        
+        EBML_CONCRETE_CLASS(KaxChapters)
 };
 
 class MATROSKA_DLL_API KaxEditionEntry : public EbmlMaster {
        public:
                KaxEditionEntry();
                KaxEditionEntry(const KaxEditionEntry & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxEditionEntry);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxEditionEntry(*this);}
+        
+        EBML_CONCRETE_CLASS(KaxEditionEntry)
 };
 
 class MATROSKA_DLL_API KaxEditionUID : public EbmlUInteger {
-public:
-    KaxEditionUID() {}
-       KaxEditionUID(const KaxEditionUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
-    static EbmlElement & Create() {return *(new KaxEditionUID);}
-    const EbmlCallbacks & Generic() const {return ClassInfos;}
-    static const EbmlCallbacks ClassInfos;
-    operator const EbmlId &() const {return ClassInfos.GlobalId;}
-       EbmlElement * Clone() const {return new KaxEditionUID(*this);}
+    public:
+        KaxEditionUID() {}
+           KaxEditionUID(const KaxEditionUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
+            
+        EBML_CONCRETE_CLASS(KaxEditionUID)
 };
 
 class MATROSKA_DLL_API KaxEditionFlagHidden : public EbmlUInteger {
-public:
-    KaxEditionFlagHidden(): EbmlUInteger(0) {}
-       KaxEditionFlagHidden(const KaxEditionFlagHidden & ElementToClone) :EbmlUInteger(ElementToClone) {}
-    static EbmlElement & Create() {return *(new KaxEditionFlagHidden);}
-    const EbmlCallbacks & Generic() const {return ClassInfos;}
-    static const EbmlCallbacks ClassInfos;
-    operator const EbmlId &() const {return ClassInfos.GlobalId;}
-       EbmlElement * Clone() const {return new KaxEditionFlagHidden(*this);}
+    public:
+        KaxEditionFlagHidden(): EbmlUInteger(0) {}
+           KaxEditionFlagHidden(const KaxEditionFlagHidden & ElementToClone) :EbmlUInteger(ElementToClone) {}
+        
+        EBML_CONCRETE_CLASS(KaxEditionFlagHidden)
 };
 
 class MATROSKA_DLL_API KaxEditionFlagDefault : public EbmlUInteger {
-public:
-    KaxEditionFlagDefault(): EbmlUInteger(0) {}
-       KaxEditionFlagDefault(const KaxEditionFlagDefault & ElementToClone) :EbmlUInteger(ElementToClone) {}
-    static EbmlElement & Create() {return *(new KaxEditionFlagDefault);}
-    const EbmlCallbacks & Generic() const {return ClassInfos;}
-    static const EbmlCallbacks ClassInfos;
-    operator const EbmlId &() const {return ClassInfos.GlobalId;}
-       EbmlElement * Clone() const {return new KaxEditionFlagDefault(*this);}
+    public:
+        KaxEditionFlagDefault(): EbmlUInteger(0) {}
+           KaxEditionFlagDefault(const KaxEditionFlagDefault & ElementToClone) :EbmlUInteger(ElementToClone) {}
+        
+        EBML_CONCRETE_CLASS(KaxEditionFlagDefault)
 };
 
 class MATROSKA_DLL_API KaxEditionFlagOrdered : public EbmlUInteger {
-public:
-    KaxEditionFlagOrdered(): EbmlUInteger(0) {}
-       KaxEditionFlagOrdered(const KaxEditionFlagOrdered & ElementToClone) :EbmlUInteger(ElementToClone) {}
-    static EbmlElement & Create() {return *(new KaxEditionFlagOrdered);}
-    const EbmlCallbacks & Generic() const {return ClassInfos;}
-    static const EbmlCallbacks ClassInfos;
-    operator const EbmlId &() const {return ClassInfos.GlobalId;}
-       EbmlElement * Clone() const {return new KaxEditionFlagOrdered(*this);}
+    public:
+        KaxEditionFlagOrdered(): EbmlUInteger(0) {}
+           KaxEditionFlagOrdered(const KaxEditionFlagOrdered & ElementToClone) :EbmlUInteger(ElementToClone) {}
+        
+        EBML_CONCRETE_CLASS(KaxEditionFlagOrdered)
 };
 
 class MATROSKA_DLL_API KaxChapterAtom : public EbmlMaster {
-public:
-    KaxChapterAtom();
-       KaxChapterAtom(const KaxChapterAtom & ElementToClone) :EbmlMaster(ElementToClone) {}
-    static EbmlElement & Create() {return *(new KaxChapterAtom);}
-    const EbmlCallbacks & Generic() const {return ClassInfos;}
-    static const EbmlCallbacks ClassInfos;
-    operator const EbmlId &() const {return ClassInfos.GlobalId;}
-       EbmlElement * Clone() const {return new KaxChapterAtom(*this);}
+    public:
+        KaxChapterAtom();
+           KaxChapterAtom(const KaxChapterAtom & ElementToClone) :EbmlMaster(ElementToClone) {}
+        
+        EBML_CONCRETE_CLASS(KaxChapterAtom)
 };
 
 class MATROSKA_DLL_API KaxChapterUID : public EbmlUInteger {
-public:
-    KaxChapterUID() {}
-       KaxChapterUID(const KaxChapterUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
-    static EbmlElement & Create() {return *(new KaxChapterUID);}
-    const EbmlCallbacks & Generic() const {return ClassInfos;}
-    static const EbmlCallbacks ClassInfos;
-    operator const EbmlId &() const {return ClassInfos.GlobalId;}
-       EbmlElement * Clone() const {return new KaxChapterUID(*this);}
+    public:
+        KaxChapterUID() {}
+           KaxChapterUID(const KaxChapterUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
+        
+        EBML_CONCRETE_CLASS(KaxChapterUID)
 };
 
 class MATROSKA_DLL_API KaxChapterTimeStart : public EbmlUInteger {
-public:
-    KaxChapterTimeStart() {}
-       KaxChapterTimeStart(const KaxChapterTimeStart & ElementToClone) :EbmlUInteger(ElementToClone) {}
-    static EbmlElement & Create() {return *(new KaxChapterTimeStart);}
-    const EbmlCallbacks & Generic() const {return ClassInfos;}
-    static const EbmlCallbacks ClassInfos;
-    operator const EbmlId &() const {return ClassInfos.GlobalId;}
-       EbmlElement * Clone() const {return new KaxChapterTimeStart(*this);}
+    public:
+        KaxChapterTimeStart() {}
+           KaxChapterTimeStart(const KaxChapterTimeStart & ElementToClone) :EbmlUInteger(ElementToClone) {}
+        
+        EBML_CONCRETE_CLASS(KaxChapterTimeStart)
 };
 
 class MATROSKA_DLL_API KaxChapterTimeEnd : public EbmlUInteger {
-public:
-    KaxChapterTimeEnd() {}
-       KaxChapterTimeEnd(const KaxChapterTimeEnd & ElementToClone) :EbmlUInteger(ElementToClone) {}
-    static EbmlElement & Create() {return *(new KaxChapterTimeEnd);}
-    const EbmlCallbacks & Generic() const {return ClassInfos;}
-    static const EbmlCallbacks ClassInfos;
-    operator const EbmlId &() const {return ClassInfos.GlobalId;}
-       EbmlElement * Clone() const {return new KaxChapterTimeEnd(*this);}
+    public:
+        KaxChapterTimeEnd() {}
+           KaxChapterTimeEnd(const KaxChapterTimeEnd & ElementToClone) :EbmlUInteger(ElementToClone) {}
+        
+        EBML_CONCRETE_CLASS(KaxChapterTimeEnd)
 };
 
 class MATROSKA_DLL_API KaxChapterFlagHidden : public EbmlUInteger {
-public:
-       KaxChapterFlagHidden(): EbmlUInteger(0) {}
-       KaxChapterFlagHidden(const KaxChapterFlagHidden & ElementToClone) :EbmlUInteger(ElementToClone) {}
-       static EbmlElement & Create() {return *(new KaxChapterFlagHidden);}
-       const EbmlCallbacks & Generic() const {return ClassInfos;}
-       static const EbmlCallbacks ClassInfos;
-       operator const EbmlId &() const {return ClassInfos.GlobalId;}
-       EbmlElement * Clone() const {return new KaxChapterFlagHidden(*this);}
+    public:
+           KaxChapterFlagHidden(): EbmlUInteger(0) {}
+           KaxChapterFlagHidden(const KaxChapterFlagHidden & ElementToClone) :EbmlUInteger(ElementToClone) {}
+        
+        EBML_CONCRETE_CLASS(KaxChapterFlagHidden)
 };
 
 class MATROSKA_DLL_API KaxChapterFlagEnabled : public EbmlUInteger {
-public:
-       KaxChapterFlagEnabled(): EbmlUInteger(1) {}
-       KaxChapterFlagEnabled(const KaxChapterFlagEnabled & ElementToClone) :EbmlUInteger(ElementToClone) {}
-       static EbmlElement & Create() {return *(new KaxChapterFlagEnabled);}
-       const EbmlCallbacks & Generic() const {return ClassInfos;}
-       static const EbmlCallbacks ClassInfos;
-       operator const EbmlId &() const {return ClassInfos.GlobalId;}
-       EbmlElement * Clone() const {return new KaxChapterFlagEnabled(*this);}
+    public:
+           KaxChapterFlagEnabled(): EbmlUInteger(1) {}
+           KaxChapterFlagEnabled(const KaxChapterFlagEnabled & ElementToClone) :EbmlUInteger(ElementToClone) {}
+        
+        EBML_CONCRETE_CLASS(KaxChapterFlagEnabled)
 };
 
 class MATROSKA_DLL_API KaxChapterSegmentUID : public EbmlBinary {
-public:
-    KaxChapterSegmentUID() {}
-       KaxChapterSegmentUID(const KaxChapterSegmentUID & ElementToClone) :EbmlBinary(ElementToClone) {}
-    static EbmlElement & Create() {return *(new KaxChapterSegmentUID);}
-    const EbmlCallbacks & Generic() const {return ClassInfos;}
-    static const EbmlCallbacks ClassInfos;
-    operator const EbmlId &() const {return ClassInfos.GlobalId;}
-       EbmlElement * Clone() const {return new KaxChapterSegmentUID(*this);}
-       bool ValidateSize() const { return (Size == 16);}
+    public:
+        KaxChapterSegmentUID() {}
+           KaxChapterSegmentUID(const KaxChapterSegmentUID & ElementToClone) :EbmlBinary(ElementToClone) {}
+           bool ValidateSize() const { return (GetSize() == 16);}
+            
+        EBML_CONCRETE_CLASS(KaxChapterSegmentUID)
 };
 
 class MATROSKA_DLL_API KaxChapterSegmentEditionUID : public EbmlBinary {
-public:
-    KaxChapterSegmentEditionUID() {}
-       KaxChapterSegmentEditionUID(const KaxChapterSegmentEditionUID & ElementToClone) :EbmlBinary(ElementToClone) {}
-    static EbmlElement & Create() {return *(new KaxChapterSegmentEditionUID);}
-    const EbmlCallbacks & Generic() const {return ClassInfos;}
-    static const EbmlCallbacks ClassInfos;
-    operator const EbmlId &() const {return ClassInfos.GlobalId;}
-       EbmlElement * Clone() const {return new KaxChapterSegmentEditionUID(*this);}
-       bool ValidateSize() const { return (Size == 16);}
+    public:
+        KaxChapterSegmentEditionUID() {}
+           KaxChapterSegmentEditionUID(const KaxChapterSegmentEditionUID & ElementToClone) :EbmlBinary(ElementToClone) {}
+           bool ValidateSize() const { return (GetSize() == 16);}
+        
+        EBML_CONCRETE_CLASS(KaxChapterSegmentEditionUID)
 };
 
 class MATROSKA_DLL_API KaxChapterPhysicalEquiv : public EbmlUInteger {
-public:
-       KaxChapterPhysicalEquiv(): EbmlUInteger() {}
-       KaxChapterPhysicalEquiv(const KaxChapterPhysicalEquiv & ElementToClone) :EbmlUInteger(ElementToClone) {}
-       static EbmlElement & Create() {return *(new KaxChapterPhysicalEquiv);}
-       const EbmlCallbacks & Generic() const {return ClassInfos;}
-       static const EbmlCallbacks ClassInfos;
-       operator const EbmlId &() const {return ClassInfos.GlobalId;}
-       EbmlElement * Clone() const {return new KaxChapterPhysicalEquiv(*this);}
+    public:
+           KaxChapterPhysicalEquiv(): EbmlUInteger() {}
+           KaxChapterPhysicalEquiv(const KaxChapterPhysicalEquiv & ElementToClone) :EbmlUInteger(ElementToClone) {}
+            
+        EBML_CONCRETE_CLASS(KaxChapterPhysicalEquiv)
 };
 
 class MATROSKA_DLL_API KaxChapterTrack : public EbmlMaster {
-public:
-    KaxChapterTrack();
-       KaxChapterTrack(const KaxChapterTrack & ElementToClone) :EbmlMaster(ElementToClone) {}
-    static EbmlElement & Create() {return *(new KaxChapterTrack);}
-    const EbmlCallbacks & Generic() const {return ClassInfos;}
-    static const EbmlCallbacks ClassInfos;
-    operator const EbmlId &() const {return ClassInfos.GlobalId;}
-       EbmlElement * Clone() const {return new KaxChapterTrack(*this);}
+    public:
+        KaxChapterTrack();
+           KaxChapterTrack(const KaxChapterTrack & ElementToClone) :EbmlMaster(ElementToClone) {}
+            
+        EBML_CONCRETE_CLASS(KaxChapterTrack)
 };
 
 class MATROSKA_DLL_API KaxChapterTrackNumber : public EbmlUInteger {
-public:
-    KaxChapterTrackNumber() {}
-       KaxChapterTrackNumber(const KaxChapterTrackNumber & ElementToClone) :EbmlUInteger(ElementToClone) {}
-    static EbmlElement & Create() {return *(new KaxChapterTrackNumber);}
-    const EbmlCallbacks & Generic() const {return ClassInfos;}
-    static const EbmlCallbacks ClassInfos;
-    operator const EbmlId &() const {return ClassInfos.GlobalId;}
-       EbmlElement * Clone() const {return new KaxChapterTrackNumber(*this);}
+    public:
+        KaxChapterTrackNumber() {}
+           KaxChapterTrackNumber(const KaxChapterTrackNumber & ElementToClone) :EbmlUInteger(ElementToClone) {}
+        
+        EBML_CONCRETE_CLASS(KaxChapterTrackNumber)
 };
 
 class MATROSKA_DLL_API KaxChapterDisplay : public EbmlMaster {
-public:
-    KaxChapterDisplay();
-       KaxChapterDisplay(const KaxChapterDisplay & ElementToClone) :EbmlMaster(ElementToClone) {}
-    static EbmlElement & Create() {return *(new KaxChapterDisplay);}
-    const EbmlCallbacks & Generic() const {return ClassInfos;}
-    static const EbmlCallbacks ClassInfos;
-    operator const EbmlId &() const {return ClassInfos.GlobalId;}
-       EbmlElement * Clone() const {return new KaxChapterDisplay(*this);}
+    public:
+        KaxChapterDisplay();
+           KaxChapterDisplay(const KaxChapterDisplay & ElementToClone) :EbmlMaster(ElementToClone) {}
+        
+        EBML_CONCRETE_CLASS(KaxChapterDisplay)
 };
 
 class MATROSKA_DLL_API KaxChapterString : public EbmlUnicodeString {
-public:
-    KaxChapterString() {}
-       KaxChapterString(const KaxChapterString & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-    static EbmlElement & Create() {return *(new KaxChapterString);}
-    const EbmlCallbacks & Generic() const {return ClassInfos;}
-    static const EbmlCallbacks ClassInfos;
-    operator const EbmlId &() const {return ClassInfos.GlobalId;}
-       EbmlElement * Clone() const {return new KaxChapterString(*this);}
+    public:
+        KaxChapterString() {}
+           KaxChapterString(const KaxChapterString & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
+        
+        EBML_CONCRETE_CLASS(KaxChapterString)
 };
 
 class MATROSKA_DLL_API KaxChapterLanguage : public EbmlString {
-public:
-    KaxChapterLanguage() :EbmlString("eng") {}
-       KaxChapterLanguage(const KaxChapterLanguage & ElementToClone) :EbmlString(ElementToClone) {}
-    static EbmlElement & Create() {return *(new KaxChapterLanguage);}
-    const EbmlCallbacks & Generic() const {return ClassInfos;}
-    static const EbmlCallbacks ClassInfos;
-    operator const EbmlId &() const {return ClassInfos.GlobalId;}
-       EbmlElement * Clone() const {return new KaxChapterLanguage(*this);}
+    public:
+        KaxChapterLanguage() :EbmlString("eng") {}
+           KaxChapterLanguage(const KaxChapterLanguage & ElementToClone) :EbmlString(ElementToClone) {}
+        
+        EBML_CONCRETE_CLASS(KaxChapterLanguage)
 };
 
 class MATROSKA_DLL_API KaxChapterCountry : public EbmlString {
-public:
-    KaxChapterCountry() :EbmlString() {}
-       KaxChapterCountry(const KaxChapterCountry & ElementToClone) :EbmlString(ElementToClone) {}
-    static EbmlElement & Create() {return *(new KaxChapterCountry);}
-    const EbmlCallbacks & Generic() const {return ClassInfos;}
-    static const EbmlCallbacks ClassInfos;
-    operator const EbmlId &() const {return ClassInfos.GlobalId;}
-       EbmlElement * Clone() const {return new KaxChapterCountry(*this);}
+    public:
+        KaxChapterCountry() :EbmlString() {}
+           KaxChapterCountry(const KaxChapterCountry & ElementToClone) :EbmlString(ElementToClone) {}
+        
+        EBML_CONCRETE_CLASS(KaxChapterCountry)
 };
 
 class MATROSKA_DLL_API KaxChapterProcess : public EbmlMaster {
-public:
-    KaxChapterProcess();
-       KaxChapterProcess(const KaxChapterProcess & ElementToClone) :EbmlMaster(ElementToClone) {}
-    static EbmlElement & Create() {return *(new KaxChapterProcess);}
-    const EbmlCallbacks & Generic() const {return ClassInfos;}
-    static const EbmlCallbacks ClassInfos;
-    operator const EbmlId &() const {return ClassInfos.GlobalId;}
-       EbmlElement * Clone() const {return new KaxChapterProcess(*this);}
+    public:
+        KaxChapterProcess();
+           KaxChapterProcess(const KaxChapterProcess & ElementToClone) :EbmlMaster(ElementToClone) {}
+        
+        EBML_CONCRETE_CLASS(KaxChapterProcess)
 };
 
 class MATROSKA_DLL_API KaxChapterProcessCodecID : public EbmlUInteger {
-public:
-    KaxChapterProcessCodecID() :EbmlUInteger(0) {}
-       KaxChapterProcessCodecID(const KaxChapterProcessCodecID & ElementToClone) :EbmlUInteger(ElementToClone) {}
-    static EbmlElement & Create() {return *(new KaxChapterProcessCodecID);}
-    const EbmlCallbacks & Generic() const {return ClassInfos;}
-    static const EbmlCallbacks ClassInfos;
-    operator const EbmlId &() const {return ClassInfos.GlobalId;}
-       EbmlElement * Clone() const {return new KaxChapterProcessCodecID(*this);}
+    public:
+        KaxChapterProcessCodecID() :EbmlUInteger(0) {}
+           KaxChapterProcessCodecID(const KaxChapterProcessCodecID & ElementToClone) :EbmlUInteger(ElementToClone) {}
+        
+        EBML_CONCRETE_CLASS(KaxChapterProcessCodecID)
 };
 
 class MATROSKA_DLL_API KaxChapterProcessPrivate : public EbmlBinary {
-public:
-    KaxChapterProcessPrivate() {}
-       KaxChapterProcessPrivate(const KaxChapterProcessPrivate & ElementToClone) :EbmlBinary(ElementToClone) {}
-    static EbmlElement & Create() {return *(new KaxChapterProcessPrivate);}
-    const EbmlCallbacks & Generic() const {return ClassInfos;}
-    static const EbmlCallbacks ClassInfos;
-    operator const EbmlId &() const {return ClassInfos.GlobalId;}
-       EbmlElement * Clone() const {return new KaxChapterProcessPrivate(*this);}
-       bool ValidateSize() const {return true;}
+    public:
+        KaxChapterProcessPrivate() {}
+           KaxChapterProcessPrivate(const KaxChapterProcessPrivate & ElementToClone) :EbmlBinary(ElementToClone) {}
+           bool ValidateSize() const {return true;}
+        
+        EBML_CONCRETE_CLASS(KaxChapterProcessPrivate)
 };
 
 class MATROSKA_DLL_API KaxChapterProcessCommand : public EbmlMaster {
-public:
-    KaxChapterProcessCommand();
-       KaxChapterProcessCommand(const KaxChapterProcessCommand & ElementToClone) :EbmlMaster(ElementToClone) {}
-    static EbmlElement & Create() {return *(new KaxChapterProcessCommand);}
-    const EbmlCallbacks & Generic() const {return ClassInfos;}
-    static const EbmlCallbacks ClassInfos;
-    operator const EbmlId &() const {return ClassInfos.GlobalId;}
-       EbmlElement * Clone() const {return new KaxChapterProcessCommand(*this);}
+    public:
+        KaxChapterProcessCommand();
+           KaxChapterProcessCommand(const KaxChapterProcessCommand & ElementToClone) :EbmlMaster(ElementToClone) {}
+        
+        EBML_CONCRETE_CLASS(KaxChapterProcessCommand)
 };
 
 class MATROSKA_DLL_API KaxChapterProcessTime : public EbmlUInteger {
-public:
-    KaxChapterProcessTime() {}
-       KaxChapterProcessTime(const KaxChapterProcessTime & ElementToClone) :EbmlUInteger(ElementToClone) {}
-    static EbmlElement & Create() {return *(new KaxChapterProcessTime);}
-    const EbmlCallbacks & Generic() const {return ClassInfos;}
-    static const EbmlCallbacks ClassInfos;
-    operator const EbmlId &() const {return ClassInfos.GlobalId;}
-       EbmlElement * Clone() const {return new KaxChapterProcessTime(*this);}
+    public:
+        KaxChapterProcessTime() {}
+           KaxChapterProcessTime(const KaxChapterProcessTime & ElementToClone) :EbmlUInteger(ElementToClone) {}
+        
+        EBML_CONCRETE_CLASS(KaxChapterProcessTime)
 };
 
 class MATROSKA_DLL_API KaxChapterProcessData : public EbmlBinary {
-public:
-    KaxChapterProcessData() {}
-       KaxChapterProcessData(const KaxChapterProcessData & ElementToClone) :EbmlBinary(ElementToClone) {}
-    static EbmlElement & Create() {return *(new KaxChapterProcessData);}
-    const EbmlCallbacks & Generic() const {return ClassInfos;}
-    static const EbmlCallbacks ClassInfos;
-    operator const EbmlId &() const {return ClassInfos.GlobalId;}
-       EbmlElement * Clone() const {return new KaxChapterProcessData(*this);}
-       bool ValidateSize() const {return true;}
+    public:
+        KaxChapterProcessData() {}
+           KaxChapterProcessData(const KaxChapterProcessData & ElementToClone) :EbmlBinary(ElementToClone) {}
+           bool ValidateSize() const {return true;}
+        
+        EBML_CONCRETE_CLASS(KaxChapterProcessData)
 };
 
 END_LIBMATROSKA_NAMESPACE
index 493147e6e64ccc8103e10ea85d513af9f255342e..4c84d2295b6c5d2b2bed81602ad31f316810cbbf 100644 (file)
@@ -52,11 +52,6 @@ class MATROSKA_DLL_API KaxCluster : public EbmlMaster {
        public:
                KaxCluster();
                KaxCluster(const KaxCluster & ElementToClone);
-               static EbmlElement & Create() {return *(new KaxCluster);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxCluster(*this);}
 
                /*!
                        \brief Addition of a frame without references
@@ -161,6 +156,7 @@ class MATROSKA_DLL_API KaxCluster : public EbmlMaster {
                */
                bool AddFrameInternal(const KaxTrackEntry & track, uint64 timecode, DataBuffer & buffer, KaxBlockGroup * & MyNewBlock, const KaxBlockGroup * PastBlock, const KaxBlockGroup * ForwBlock, LacingType lacing);
 
+        EBML_CONCRETE_CLASS(KaxCluster)
 };
 
 END_LIBMATROSKA_NAMESPACE
index 0e26a373556f9accca58c7499bb6cad717e80fab..d6e9f7bfd30403b3354b1ee005743567f4520eb8 100644 (file)
@@ -47,55 +47,40 @@ class MATROSKA_DLL_API KaxClusterTimecode : public EbmlUInteger {
        public:
                KaxClusterTimecode() {}
                KaxClusterTimecode(const KaxClusterTimecode & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxClusterTimecode);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxClusterTimecode(*this);}
+
+        EBML_CONCRETE_CLASS(KaxClusterTimecode)
 };
 
 class MATROSKA_DLL_API KaxClusterSilentTracks : public EbmlMaster {
        public:
                KaxClusterSilentTracks();
                KaxClusterSilentTracks(const KaxClusterSilentTracks & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxClusterSilentTracks);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxClusterSilentTracks(*this);}
+
+        EBML_CONCRETE_CLASS(KaxClusterSilentTracks)
 };
 
 class MATROSKA_DLL_API KaxClusterSilentTrackNumber : public EbmlUInteger {
        public:
                KaxClusterSilentTrackNumber() {}
                KaxClusterSilentTrackNumber(const KaxClusterSilentTrackNumber & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxClusterSilentTrackNumber);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxClusterSilentTrackNumber(*this);}
+
+        EBML_CONCRETE_CLASS(KaxClusterSilentTrackNumber)
 };
 
 class MATROSKA_DLL_API KaxClusterPosition : public EbmlUInteger {
        public:
                KaxClusterPosition() {}
                KaxClusterPosition(const KaxClusterPosition & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxClusterPosition);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxClusterPosition(*this);}
+
+        EBML_CONCRETE_CLASS(KaxClusterPosition)
 };
 
 class MATROSKA_DLL_API KaxClusterPrevSize : public EbmlUInteger {
        public:
                KaxClusterPrevSize() {}
                KaxClusterPrevSize(const KaxClusterPrevSize & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxClusterPrevSize);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxClusterPrevSize(*this);}
+
+        EBML_CONCRETE_CLASS(KaxClusterPrevSize)
 };
 
 END_LIBMATROSKA_NAMESPACE
index d1b241c575d8bdb7e958098ed0bcc66fb9512bc5..b6e3d2d42dd5f97ea6d3ac1c1491198406769ac4 100644 (file)
@@ -45,204 +45,142 @@ using namespace LIBEBML_NAMESPACE;
 START_LIBMATROSKA_NAMESPACE
 
 class MATROSKA_DLL_API KaxContentEncodings: public EbmlMaster {
-public:
-  static const EbmlCallbacks ClassInfos;
-
-  KaxContentEncodings();
-  KaxContentEncodings(const KaxContentEncodings &ElementToClone):
-    EbmlMaster(ElementToClone) {}
-  static EbmlElement &Create() { return *(new KaxContentEncodings); }
-  const EbmlCallbacks &Generic() const { return ClassInfos; }
-  operator const EbmlId &() const { return ClassInfos.GlobalId; }
-  EbmlElement *Clone() const { return new KaxContentEncodings(*this); }
+    public:
+        KaxContentEncodings();
+        KaxContentEncodings(const KaxContentEncodings &ElementToClone):
+            EbmlMaster(ElementToClone) {}
+
+        EBML_CONCRETE_CLASS(KaxContentEncodings)
 };
 
 class MATROSKA_DLL_API KaxContentEncoding: public EbmlMaster {
-public:
-  static const EbmlCallbacks ClassInfos;
-
-  KaxContentEncoding();
-  KaxContentEncoding(const KaxContentEncoding &ElementToClone):
-    EbmlMaster(ElementToClone) {}
-  static EbmlElement &Create() { return *(new KaxContentEncoding); }
-  const EbmlCallbacks &Generic() const { return ClassInfos; }
-  operator const EbmlId &() const { return ClassInfos.GlobalId; }
-  EbmlElement *Clone() const { return new KaxContentEncoding(*this); }
+    public:
+        KaxContentEncoding();
+        KaxContentEncoding(const KaxContentEncoding &ElementToClone):
+            EbmlMaster(ElementToClone) {}
+
+        EBML_CONCRETE_CLASS(KaxContentEncoding)
 };
 
 class MATROSKA_DLL_API KaxContentEncodingOrder: public EbmlUInteger {
-public:
-  static const EbmlCallbacks ClassInfos;
-
-  KaxContentEncodingOrder(): EbmlUInteger(0) {}
-  KaxContentEncodingOrder(const KaxContentEncodingOrder &ElementToClone):
-    EbmlUInteger(ElementToClone) {}
-  static EbmlElement &Create() { return *(new KaxContentEncodingOrder); }
-  const EbmlCallbacks &Generic() const { return ClassInfos; }
-  operator const EbmlId &() const { return ClassInfos.GlobalId; }
-  EbmlElement *Clone() const { return new KaxContentEncodingOrder(*this); }
+    public:
+        KaxContentEncodingOrder(): EbmlUInteger(0) {}
+        KaxContentEncodingOrder(const KaxContentEncodingOrder &ElementToClone):
+            EbmlUInteger(ElementToClone) {}
+
+        EBML_CONCRETE_CLASS(KaxContentEncodingOrder)
 };
 
 class MATROSKA_DLL_API KaxContentEncodingScope: public EbmlUInteger {
-public:
-  static const EbmlCallbacks ClassInfos;
-
-  KaxContentEncodingScope(): EbmlUInteger(1) {}
-  KaxContentEncodingScope(const KaxContentEncodingScope &ElementToClone):
-    EbmlUInteger(ElementToClone) {}
-  static EbmlElement &Create() { return *(new KaxContentEncodingScope); }
-  const EbmlCallbacks &Generic() const { return ClassInfos; }
-  operator const EbmlId &() const { return ClassInfos.GlobalId; }
-  EbmlElement *Clone() const { return new KaxContentEncodingScope(*this); }
+    public:
+        KaxContentEncodingScope(): EbmlUInteger(1) {}
+        KaxContentEncodingScope(const KaxContentEncodingScope &ElementToClone):
+        EbmlUInteger(ElementToClone) {}
+
+        EBML_CONCRETE_CLASS(KaxContentEncodingScope)
 };
 
 class MATROSKA_DLL_API KaxContentEncodingType: public EbmlUInteger {
-public:
-  static const EbmlCallbacks ClassInfos;
-
-  KaxContentEncodingType(): EbmlUInteger(0) {}
-  KaxContentEncodingType(const KaxContentEncodingType &ElementToClone):
-    EbmlUInteger(ElementToClone) {}
-  static EbmlElement &Create() { return *(new KaxContentEncodingType); }
-  const EbmlCallbacks &Generic() const { return ClassInfos; }
-  operator const EbmlId &() const { return ClassInfos.GlobalId; }
-  EbmlElement *Clone() const { return new KaxContentEncodingType(*this); }
+    public:
+        KaxContentEncodingType(): EbmlUInteger(0) {}
+        KaxContentEncodingType(const KaxContentEncodingType &ElementToClone):
+            EbmlUInteger(ElementToClone) {}
+
+        EBML_CONCRETE_CLASS(KaxContentEncodingType)
 };
 
 class MATROSKA_DLL_API KaxContentCompression: public EbmlMaster {
-public:
-  static const EbmlCallbacks ClassInfos;
-
-  KaxContentCompression();
-  KaxContentCompression(const KaxContentCompression &ElementToClone):
-    EbmlMaster(ElementToClone) {}
-  static EbmlElement &Create() { return *(new KaxContentCompression); }
-  const EbmlCallbacks &Generic() const { return ClassInfos; }
-  operator const EbmlId &() const { return ClassInfos.GlobalId; }
-  EbmlElement *Clone() const { return new KaxContentCompression(*this); }
+    public:
+        KaxContentCompression();
+        KaxContentCompression(const KaxContentCompression &ElementToClone):
+            EbmlMaster(ElementToClone) {}
+
+        EBML_CONCRETE_CLASS(KaxContentCompression)
 };
 
 class MATROSKA_DLL_API KaxContentCompAlgo: public EbmlUInteger {
-public:
-  static const EbmlCallbacks ClassInfos;
-
-  KaxContentCompAlgo(): EbmlUInteger(0) {}
-  KaxContentCompAlgo(const KaxContentCompAlgo &ElementToClone):
-    EbmlUInteger(ElementToClone) {}
-  static EbmlElement &Create() { return *(new KaxContentCompAlgo); }
-  const EbmlCallbacks &Generic() const { return ClassInfos; }
-  operator const EbmlId &() const { return ClassInfos.GlobalId; }
-  EbmlElement *Clone() const { return new KaxContentCompAlgo(*this); }
+    public:
+        KaxContentCompAlgo(): EbmlUInteger(0) {}
+        KaxContentCompAlgo(const KaxContentCompAlgo &ElementToClone):
+            EbmlUInteger(ElementToClone) {}
+
+        EBML_CONCRETE_CLASS(KaxContentCompAlgo)
 };
 
 class MATROSKA_DLL_API KaxContentCompSettings: public EbmlBinary {
-public:
-  static const EbmlCallbacks ClassInfos;
-
-  KaxContentCompSettings() {}
-  KaxContentCompSettings(const KaxContentCompSettings &ElementToClone):
-    EbmlBinary(ElementToClone) {}
-  static EbmlElement &Create() { return *(new KaxContentCompSettings); }
-  const EbmlCallbacks &Generic() const { return ClassInfos; }
-  operator const EbmlId &() const { return ClassInfos.GlobalId; }
-  EbmlElement *Clone() const {
-    return new KaxContentCompSettings(*this);
-  }
-  bool ValidateSize(void) const { return true; }
+    public:
+        KaxContentCompSettings() {}
+        KaxContentCompSettings(const KaxContentCompSettings &ElementToClone):
+            EbmlBinary(ElementToClone) {}
+        bool ValidateSize(void) const { return true; }
+
+        EBML_CONCRETE_CLASS(KaxContentCompSettings)
 };
 
 class MATROSKA_DLL_API KaxContentEncryption: public EbmlMaster {
-public:
-  static const EbmlCallbacks ClassInfos;
-
-  KaxContentEncryption();
-  KaxContentEncryption(const KaxContentEncryption &ElementToClone):
-    EbmlMaster(ElementToClone) {}
-  static EbmlElement &Create() { return *(new KaxContentEncryption); }
-  const EbmlCallbacks &Generic() const { return ClassInfos; }
-  operator const EbmlId &() const { return ClassInfos.GlobalId; }
-  EbmlElement *Clone() const { return new KaxContentEncryption(*this); }
+    public:
+        KaxContentEncryption();
+        KaxContentEncryption(const KaxContentEncryption &ElementToClone):
+            EbmlMaster(ElementToClone) {}
+
+        EBML_CONCRETE_CLASS(KaxContentEncryption)
 };
 
 class MATROSKA_DLL_API KaxContentEncAlgo: public EbmlUInteger {
-public:
-  static const EbmlCallbacks ClassInfos;
-
-  KaxContentEncAlgo(): EbmlUInteger(0) {}
-  KaxContentEncAlgo(const KaxContentEncAlgo &ElementToClone):
-    EbmlUInteger(ElementToClone) {}
-  static EbmlElement &Create() { return *(new KaxContentEncAlgo); }
-  const EbmlCallbacks &Generic() const { return ClassInfos; }
-  operator const EbmlId &() const { return ClassInfos.GlobalId; }
-  EbmlElement *Clone() const { return new KaxContentEncAlgo(*this); }
+    public:
+        KaxContentEncAlgo(): EbmlUInteger(0) {}
+        KaxContentEncAlgo(const KaxContentEncAlgo &ElementToClone):
+            EbmlUInteger(ElementToClone) {}
+
+        EBML_CONCRETE_CLASS(KaxContentEncAlgo)
 };
 
 class MATROSKA_DLL_API KaxContentEncKeyID: public EbmlBinary {
-public:
-  static const EbmlCallbacks ClassInfos;
-
-  KaxContentEncKeyID() {}
-  KaxContentEncKeyID(const KaxContentEncKeyID &ElementToClone):
-    EbmlBinary(ElementToClone) {}
-  static EbmlElement &Create() { return *(new KaxContentEncKeyID); }
-  const EbmlCallbacks &Generic() const { return ClassInfos; }
-  operator const EbmlId &() const { return ClassInfos.GlobalId; }
-  EbmlElement *Clone() const { return new KaxContentEncKeyID(*this); }
-  bool ValidateSize(void) const { return true; }
+    public:
+        KaxContentEncKeyID() {}
+        KaxContentEncKeyID(const KaxContentEncKeyID &ElementToClone):
+            EbmlBinary(ElementToClone) {}
+        bool ValidateSize(void) const { return true; }
+
+        EBML_CONCRETE_CLASS(KaxContentEncKeyID)
 };
 
 class MATROSKA_DLL_API KaxContentSignature: public EbmlBinary {
-public:
-  static const EbmlCallbacks ClassInfos;
-
-  KaxContentSignature() {}
-  KaxContentSignature(const KaxContentSignature &ElementToClone):
-    EbmlBinary(ElementToClone) {}
-  static EbmlElement &Create() { return *(new KaxContentSignature); }
-  const EbmlCallbacks &Generic() const { return ClassInfos; }
-  operator const EbmlId &() const { return ClassInfos.GlobalId; }
-  EbmlElement *Clone() const { return new KaxContentSignature(*this); }
-  bool ValidateSize(void) const { return true; }
+    public:
+        KaxContentSignature() {}
+        KaxContentSignature(const KaxContentSignature &ElementToClone):
+            EbmlBinary(ElementToClone) {}
+        bool ValidateSize(void) const { return true; }
+
+        EBML_CONCRETE_CLASS(KaxContentSignature)
 };
 
 class MATROSKA_DLL_API KaxContentSigKeyID: public EbmlBinary {
-public:
-  static const EbmlCallbacks ClassInfos;
-
-  KaxContentSigKeyID() {}
-  KaxContentSigKeyID(const KaxContentSigKeyID &ElementToClone):
-    EbmlBinary(ElementToClone) {}
-  static EbmlElement &Create() { return *(new KaxContentSigKeyID); }
-  const EbmlCallbacks &Generic() const { return ClassInfos; }
-  operator const EbmlId &() const { return ClassInfos.GlobalId; }
-  EbmlElement *Clone() const { return new KaxContentSigKeyID(*this); }
-  bool ValidateSize(void) const { return true; }
+    public:
+        KaxContentSigKeyID() {}
+        KaxContentSigKeyID(const KaxContentSigKeyID &ElementToClone):
+            EbmlBinary(ElementToClone) {}
+        bool ValidateSize(void) const { return true; }
+
+        EBML_CONCRETE_CLASS(KaxContentSigKeyID)
 };
 
 class MATROSKA_DLL_API KaxContentSigAlgo: public EbmlUInteger {
-public:
-  static const EbmlCallbacks ClassInfos;
-
-  KaxContentSigAlgo() {}
-  KaxContentSigAlgo(const KaxContentSigAlgo &ElementToClone):
-    EbmlUInteger(ElementToClone) {}
-  static EbmlElement &Create() { return *(new KaxContentSigAlgo); }
-  const EbmlCallbacks &Generic() const { return ClassInfos; }
-  operator const EbmlId &() const { return ClassInfos.GlobalId; }
-  EbmlElement *Clone() const { return new KaxContentSigAlgo(*this); }
+    public:
+        KaxContentSigAlgo() {}
+        KaxContentSigAlgo(const KaxContentSigAlgo &ElementToClone):
+            EbmlUInteger(ElementToClone) {}
+
+        EBML_CONCRETE_CLASS(KaxContentSigAlgo)
 };
 
 class MATROSKA_DLL_API KaxContentSigHashAlgo: public EbmlUInteger {
-public:
-  static const EbmlCallbacks ClassInfos;
-
-  KaxContentSigHashAlgo() {}
-  KaxContentSigHashAlgo(const KaxContentSigHashAlgo &ElementToClone):
-    EbmlUInteger(ElementToClone) {}
-  static EbmlElement &Create() { return *(new KaxContentSigHashAlgo); }
-  const EbmlCallbacks &Generic() const { return ClassInfos; }
-  operator const EbmlId &() const { return ClassInfos.GlobalId; }
-  EbmlElement *Clone() const { return new KaxContentSigHashAlgo(*this); }
+    public:
+        KaxContentSigHashAlgo() {}
+        KaxContentSigHashAlgo(const KaxContentSigHashAlgo &ElementToClone):
+            EbmlUInteger(ElementToClone) {}
+
+        EBML_CONCRETE_CLASS(KaxContentSigHashAlgo)
 };
 
 END_LIBMATROSKA_NAMESPACE
index c39c1af98fe93b728d0d61d45e1def1dc76a0597..92d2f88de639226c5280d210fb77fb3efcc7f88d 100644 (file)
@@ -52,11 +52,6 @@ class MATROSKA_DLL_API KaxCues : public EbmlMaster {
                KaxCues();
                KaxCues(const KaxCues & ElementToClone) :EbmlMaster(ElementToClone) {}
                ~KaxCues();
-               static EbmlElement & Create() {return *(new KaxCues);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxCues(*this);}
 
                bool AddBlockGroup(const KaxBlockGroup & BlockReference);
                bool AddBlockBlob(const KaxBlockBlob & BlockReference);
@@ -91,6 +86,8 @@ class MATROSKA_DLL_API KaxCues : public EbmlMaster {
                std::vector<const KaxBlockBlob *> myTempReferences;
                bool   bGlobalTimecodeScaleIsSet;
                uint64 mGlobalTimecodeScale;
+
+        EBML_CONCRETE_CLASS(KaxCues)
 };
 
 END_LIBMATROSKA_NAMESPACE
index 4c2c0695218ce07daa267591a9a8ed17f19b4df5..86d3c2174d001169c70ab21a21c6cbc708922e06 100644 (file)
@@ -50,11 +50,6 @@ class MATROSKA_DLL_API KaxCuePoint : public EbmlMaster {
        public:
                KaxCuePoint();
                KaxCuePoint(const KaxCuePoint & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxCuePoint);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxCuePoint(*this);}
                void PositionSet(const KaxBlockGroup & BlockReference, uint64 GlobalTimecodeScale);
                void PositionSet(const KaxBlockBlob & BlobReference, uint64 GlobalTimecodeScale);
 
@@ -62,64 +57,51 @@ class MATROSKA_DLL_API KaxCuePoint : public EbmlMaster {
 
                const KaxCueTrackPositions * GetSeekPosition() const;
                bool Timecode(uint64 & aTimecode, uint64 GlobalTimecodeScale) const;
+
+        EBML_CONCRETE_CLASS(KaxCuePoint)
 };
 
 class MATROSKA_DLL_API KaxCueTime : public EbmlUInteger {
        public:
                KaxCueTime() {}
                KaxCueTime(const KaxCueTime & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxCueTime);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxCueTime(*this);}
+
+        EBML_CONCRETE_CLASS(KaxCueTime)
 };
 
 class MATROSKA_DLL_API KaxCueTrackPositions : public EbmlMaster {
        public:
                KaxCueTrackPositions();
                KaxCueTrackPositions(const KaxCueTrackPositions & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxCueTrackPositions);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxCueTrackPositions(*this);}
 
                uint64 ClusterPosition() const;
                uint16 TrackNumber() const;
+
+        EBML_CONCRETE_CLASS(KaxCueTrackPositions)
 };
 
 class MATROSKA_DLL_API KaxCueTrack : public EbmlUInteger {
        public:
                KaxCueTrack() {}
                KaxCueTrack(const KaxCueTrack & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxCueTrack);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxCueTrack(*this);}
+
+        EBML_CONCRETE_CLASS(KaxCueTrack)
 };
 
 class MATROSKA_DLL_API KaxCueClusterPosition : public EbmlUInteger {
        public:
                KaxCueClusterPosition() {}
                KaxCueClusterPosition(const KaxCueClusterPosition & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxCueClusterPosition);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxCueClusterPosition(*this);}
+
+        EBML_CONCRETE_CLASS(KaxCueClusterPosition)
 };
 
 class MATROSKA_DLL_API KaxCueBlockNumber : public EbmlUInteger {
        public:
                KaxCueBlockNumber() :EbmlUInteger(1) {}
                KaxCueBlockNumber(const KaxCueBlockNumber & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxCueBlockNumber);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxCueBlockNumber(*this);}
+
+        EBML_CONCRETE_CLASS(KaxCueBlockNumber)
 };
 
 #if MATROSKA_VERSION >= 2
@@ -127,69 +109,51 @@ class MATROSKA_DLL_API KaxCueCodecState : public EbmlUInteger {
        public:
                KaxCueCodecState() :EbmlUInteger(0) {}
                KaxCueCodecState(const KaxCueCodecState & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxCueCodecState);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxCueCodecState(*this);}
+
+        EBML_CONCRETE_CLASS(KaxCueCodecState)
 };
 
 class MATROSKA_DLL_API KaxCueReference : public EbmlMaster {
        public:
                KaxCueReference();
                KaxCueReference(const KaxCueReference & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxCueReference);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxCueReference(*this);}
                
                void AddReference(const KaxBlockGroup & BlockReferenced, uint64 GlobalTimecodeScale);
                void AddReference(const KaxBlockBlob & BlockReferenced, uint64 GlobalTimecodeScale);
+
+        EBML_CONCRETE_CLASS(KaxCueReference)
 };
 
 class MATROSKA_DLL_API KaxCueRefTime : public EbmlUInteger {
        public:
                KaxCueRefTime() {}
                KaxCueRefTime(const KaxCueRefTime & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxCueRefTime);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxCueRefTime(*this);}
+
+        EBML_CONCRETE_CLASS(KaxCueRefTime)
 };
 
 class MATROSKA_DLL_API KaxCueRefCluster : public EbmlUInteger {
        public:
                KaxCueRefCluster() {}
                KaxCueRefCluster(const KaxCueRefCluster & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxCueRefCluster);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxCueRefCluster(*this);}
+
+        EBML_CONCRETE_CLASS(KaxCueRefCluster)
 };
 
 class MATROSKA_DLL_API KaxCueRefNumber : public EbmlUInteger {
        public:
                KaxCueRefNumber() :EbmlUInteger(1) {}
                KaxCueRefNumber(const KaxCueRefNumber & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxCueRefNumber);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxCueRefNumber(*this);}
+
+        EBML_CONCRETE_CLASS(KaxCueRefNumber)
 };
 
 class MATROSKA_DLL_API KaxCueRefCodecState : public EbmlUInteger {
        public:
                KaxCueRefCodecState() :EbmlUInteger(0) {}
                KaxCueRefCodecState(const KaxCueRefCodecState & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxCueRefCodecState);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxCueRefCodecState(*this);}
+
+        EBML_CONCRETE_CLASS(KaxCueRefCodecState)
 };
 #endif // MATROSKA_VERSION
 
index 5ba569b12fe64a77dbb5a907252f160110938c39..8c422cf1252aee3f2c5e6665a94724396707239f 100644 (file)
@@ -47,33 +47,24 @@ class MATROSKA_DLL_API KaxInfo : public EbmlMaster {
        public:
                KaxInfo();
                KaxInfo(const KaxInfo & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxInfo);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxInfo(*this);}
+
+        EBML_CONCRETE_CLASS(KaxInfo)
 };
 
 class MATROSKA_DLL_API KaxMuxingApp : public EbmlUnicodeString {
        public:
                KaxMuxingApp() {}
                KaxMuxingApp(const KaxMuxingApp & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxMuxingApp);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxMuxingApp(*this);}
+
+        EBML_CONCRETE_CLASS(KaxMuxingApp)
 };
 
 class MATROSKA_DLL_API KaxWritingApp : public EbmlUnicodeString {
        public:
                KaxWritingApp() {}
                KaxWritingApp(const KaxWritingApp & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxWritingApp);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxWritingApp(*this);}
+
+        EBML_CONCRETE_CLASS(KaxWritingApp)
 };
 
 END_LIBMATROSKA_NAMESPACE
index 5325c1a5ee8db7b860747fcb02e874d50254a702..99c287dc0267431ab909b0fc6f3ced6bb5e02ee0 100644 (file)
@@ -53,170 +53,125 @@ class MATROSKA_DLL_API KaxSegmentUID : public EbmlBinary {
        public:
                KaxSegmentUID() {}
                KaxSegmentUID(const KaxSegmentUID & ElementToClone) :EbmlBinary(ElementToClone){}
-               static EbmlElement & Create() {return *(new KaxSegmentUID);}
                bool ValidateSize() const { return (GetSize() == 16);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxSegmentUID(*this);}
+
+        EBML_CONCRETE_CLASS(KaxSegmentUID)
 };
 
 class MATROSKA_DLL_API KaxSegmentFilename : public EbmlUnicodeString {
        public:
                KaxSegmentFilename() {}
                KaxSegmentFilename(const KaxSegmentFilename & ElementToClone) :EbmlUnicodeString(ElementToClone){}
-               static EbmlElement & Create() {return *(new KaxSegmentFilename);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxSegmentFilename(*this);}
+
+        EBML_CONCRETE_CLASS(KaxSegmentFilename)
 };
 
 class MATROSKA_DLL_API KaxPrevUID : public KaxSegmentUID {
        public:
                KaxPrevUID() {}
                KaxPrevUID(const KaxPrevUID & ElementToClone) :KaxSegmentUID(ElementToClone){}
-               static EbmlElement & Create() {return *(new KaxPrevUID);}
                bool ValidateSize() const { return (GetSize() == 16);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxPrevUID(*this);}
+
+        EBML_CONCRETE_CLASS(KaxPrevUID)
 };
 
 class MATROSKA_DLL_API KaxPrevFilename : public EbmlUnicodeString {
        public:
                KaxPrevFilename() :EbmlUnicodeString() {}
                KaxPrevFilename(const KaxPrevFilename & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxPrevFilename);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxPrevFilename(*this);}
+
+        EBML_CONCRETE_CLASS(KaxPrevFilename)
 };
 
 class MATROSKA_DLL_API KaxNextUID : public KaxSegmentUID {
        public:
                KaxNextUID() {}
                KaxNextUID(const KaxNextUID & ElementToClone) :KaxSegmentUID(ElementToClone){}
-               static EbmlElement & Create() {return *(new KaxNextUID);}
                bool ValidateSize() const { return (GetSize() == 16);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxNextUID(*this);}
+
+        EBML_CONCRETE_CLASS(KaxNextUID)
 };
 
 class MATROSKA_DLL_API KaxNextFilename : public EbmlUnicodeString {
        public:
                KaxNextFilename() {}
                KaxNextFilename(const KaxNextFilename & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxNextFilename);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxNextFilename(*this);}
+
+        EBML_CONCRETE_CLASS(KaxNextFilename)
 };
 
 class MATROSKA_DLL_API KaxSegmentFamily : public EbmlBinary {
        public:
                KaxSegmentFamily() {}
                KaxSegmentFamily(const KaxSegmentFamily & ElementToClone) :EbmlBinary(ElementToClone){}
-               static EbmlElement & Create() {return *(new KaxSegmentFamily);}
                bool ValidateSize() const { return (GetSize() == 16);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxSegmentFamily(*this);}
+
+        EBML_CONCRETE_CLASS(KaxSegmentFamily)
 };
 
 class MATROSKA_DLL_API KaxChapterTranslate : public EbmlMaster {
        public:
                KaxChapterTranslate();
                KaxChapterTranslate(const KaxChapterTranslate & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxChapterTranslate);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxChapterTranslate(*this);}
+
+        EBML_CONCRETE_CLASS(KaxChapterTranslate)
 };
 
 class MATROSKA_DLL_API KaxChapterTranslateCodec : public EbmlUInteger {
        public:
                KaxChapterTranslateCodec() {}
                KaxChapterTranslateCodec(const KaxChapterTranslateCodec & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxChapterTranslateCodec);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxChapterTranslateCodec(*this);}
+
+        EBML_CONCRETE_CLASS(KaxChapterTranslateCodec)
 };
 
 class MATROSKA_DLL_API KaxChapterTranslateEditionUID : public EbmlUInteger {
        public:
                KaxChapterTranslateEditionUID() {}
                KaxChapterTranslateEditionUID(const KaxChapterTranslateEditionUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxChapterTranslateEditionUID);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxChapterTranslateEditionUID(*this);}
+
+        EBML_CONCRETE_CLASS(KaxChapterTranslateEditionUID)
 };
 
 class MATROSKA_DLL_API KaxChapterTranslateID : public EbmlBinary {
        public:
                KaxChapterTranslateID() {}
                KaxChapterTranslateID(const KaxChapterTranslateID & ElementToClone) :EbmlBinary(ElementToClone){}
-               static EbmlElement & Create() {return *(new KaxChapterTranslateID);}
                bool ValidateSize() const { return true;}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxChapterTranslateID(*this);}
+
+        EBML_CONCRETE_CLASS(KaxChapterTranslateID)
 };
 
 class MATROSKA_DLL_API KaxTimecodeScale : public EbmlUInteger {
        public:
                KaxTimecodeScale() :EbmlUInteger(1000000) {}
                KaxTimecodeScale(const KaxTimecodeScale & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTimecodeScale);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTimecodeScale(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTimecodeScale)
 };
 
 class MATROSKA_DLL_API KaxDuration : public EbmlFloat {
        public:
                KaxDuration(): EbmlFloat(FLOAT_64) {}
                KaxDuration(const KaxDuration & ElementToClone) :EbmlFloat(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxDuration);}              
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxDuration(*this);}
+
+        EBML_CONCRETE_CLASS(KaxDuration)
 };
 
 class MATROSKA_DLL_API KaxDateUTC : public EbmlDate {
        public:
                KaxDateUTC() {}
                KaxDateUTC(const KaxDateUTC & ElementToClone) :EbmlDate(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxDateUTC);}               
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxDateUTC(*this);}
+
+        EBML_CONCRETE_CLASS(KaxDateUTC)
 };
 
 class MATROSKA_DLL_API KaxTitle : public EbmlUnicodeString {
        public:
                KaxTitle() {}
                KaxTitle(const KaxTitle & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTitle);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTitle(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTitle)
 };
 
 END_LIBMATROSKA_NAMESPACE
index d3c2b4f874dd5564817d92bebfe14648d73bc7ae..1382855e80fdca90c27c11dab79eb381e28b0be5 100644 (file)
@@ -51,11 +51,6 @@ class MATROSKA_DLL_API KaxSeekHead : public EbmlMaster {
        public:
                KaxSeekHead();
                KaxSeekHead(const KaxSeekHead & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxSeekHead);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxSeekHead(*this);}
 
                /*!
                        \brief add an element to index in the Meta Seek data
@@ -65,44 +60,37 @@ class MATROSKA_DLL_API KaxSeekHead : public EbmlMaster {
 
                KaxSeek * FindFirstOf(const EbmlCallbacks & Callbacks) const;
                KaxSeek * FindNextOf(const KaxSeek &aPrev) const;
+
+        EBML_CONCRETE_CLASS(KaxSeekHead)
 };
 
 class MATROSKA_DLL_API KaxSeek : public EbmlMaster {
        public:
                KaxSeek();
                KaxSeek(const KaxSeek & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxSeek);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxSeek(*this);}
 
                int64 Location() const;
                bool IsEbmlId(const EbmlId & aId) const;
                bool IsEbmlId(const KaxSeek & aPoint) const;
+
+        EBML_CONCRETE_CLASS(KaxSeek)
 };
 
 class MATROSKA_DLL_API KaxSeekID : public EbmlBinary {
        public:
                KaxSeekID() {}
                KaxSeekID(const KaxSeekID & ElementToClone) :EbmlBinary(ElementToClone){}
-               static EbmlElement & Create() {return *(new KaxSeekID);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
                bool ValidateSize() const {return GetSize() <= 4;}
-               EbmlElement * Clone() const {return new KaxSeekID(*this);}
+
+        EBML_CONCRETE_CLASS(KaxSeekID)
 };
 
 class MATROSKA_DLL_API KaxSeekPosition : public EbmlUInteger {
        public:
                KaxSeekPosition() {}
                KaxSeekPosition(const KaxSeekPosition & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxSeekPosition);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxSeekPosition(*this);}
+
+        EBML_CONCRETE_CLASS(KaxSeekPosition)
 };
 
 END_LIBMATROSKA_NAMESPACE
index 50fc6e028869b8751b9769ac03029a0d861ced5c..cad6be9219dec89bd1c06fac367e97d858ade09b 100644 (file)
@@ -46,11 +46,6 @@ class MATROSKA_DLL_API KaxSegment : public EbmlMaster {
        public:
                KaxSegment();
                KaxSegment(const KaxSegment & ElementToClone);
-               static EbmlElement & Create() {return *(new KaxSegment);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxSegment(*this);}
 
                /*!
                        \brief give the position of the element in the segment
@@ -62,6 +57,8 @@ class MATROSKA_DLL_API KaxSegment : public EbmlMaster {
                        \brief give the position of the element in the file
                */
                uint64 GetGlobalPosition(uint64 aRelativePosition) const;
+
+        EBML_CONCRETE_CLASS(KaxSegment)
 };
 
 END_LIBMATROSKA_NAMESPACE
index 98e64eb96f201e49a825049ec72e962a16ba4e52..9572ff76297e71bc53d04a1236bbd498330973ed 100644 (file)
@@ -53,645 +53,471 @@ class MATROSKA_DLL_API KaxTag : public EbmlMaster {
        public:
                KaxTag();
                KaxTag(const KaxTag & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTag);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTag(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTag)
 };
 
 class MATROSKA_DLL_API KaxTagTargets : public EbmlMaster {
        public:
                KaxTagTargets();
                KaxTagTargets(const KaxTagTargets & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagTargets);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagTargets(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagTargets)
 };
 
 class MATROSKA_DLL_API KaxTagGeneral : public EbmlMaster {
        public:
                KaxTagGeneral();
                KaxTagGeneral(const KaxTagGeneral & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagGeneral);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagGeneral(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagGeneral)
 };
 
 class MATROSKA_DLL_API KaxTagGenres : public EbmlMaster {
        public:
                KaxTagGenres();
                KaxTagGenres(const KaxTagGenres & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagGenres);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagGenres(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagGenres)
 };
 
 class MATROSKA_DLL_API KaxTagAudioSpecific : public EbmlMaster {
        public:
                KaxTagAudioSpecific();
                KaxTagAudioSpecific(const KaxTagAudioSpecific & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagAudioSpecific);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagAudioSpecific(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagAudioSpecific)
 };
 
 class MATROSKA_DLL_API KaxTagImageSpecific : public EbmlMaster {
        public:
                KaxTagImageSpecific();
                KaxTagImageSpecific(const KaxTagImageSpecific & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagImageSpecific);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagImageSpecific(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagImageSpecific)
 };
 
 class MATROSKA_DLL_API KaxTagTargetTypeValue : public EbmlUInteger {
        public:
                KaxTagTargetTypeValue() :EbmlUInteger(50) {}
                KaxTagTargetTypeValue(const KaxTagTargetTypeValue & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagTargetTypeValue);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagTargetTypeValue(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagTargetTypeValue)
 };
 
 class MATROSKA_DLL_API KaxTagTargetType : public EbmlString {
        public:
                KaxTagTargetType() {}
                KaxTagTargetType(const KaxTagTargetType & ElementToClone) :EbmlString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagTargetType);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagTargetType(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagTargetType)
 };
 
 class MATROSKA_DLL_API KaxTagTrackUID : public EbmlUInteger {
        public:
                KaxTagTrackUID() :EbmlUInteger(0) {}
                KaxTagTrackUID(const KaxTagTrackUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagTrackUID);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagTrackUID(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagTrackUID)
 };
 
 class MATROSKA_DLL_API KaxTagEditionUID : public EbmlUInteger {
        public:
                KaxTagEditionUID() :EbmlUInteger(0) {}
                KaxTagEditionUID(const KaxTagEditionUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagEditionUID);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagEditionUID(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagEditionUID)
 };
 
 class MATROSKA_DLL_API KaxTagChapterUID : public EbmlUInteger {
        public:
                KaxTagChapterUID() :EbmlUInteger(0) {}
                KaxTagChapterUID(const KaxTagChapterUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagChapterUID);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagChapterUID(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagChapterUID)
 };
 
 class MATROSKA_DLL_API KaxTagAttachmentUID : public EbmlUInteger {
        public:
                KaxTagAttachmentUID() :EbmlUInteger(0) {}
                KaxTagAttachmentUID(const KaxTagAttachmentUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagAttachmentUID);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagAttachmentUID(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagAttachmentUID)
 };
 
 class MATROSKA_DLL_API KaxTagArchivalLocation : public EbmlUnicodeString {
        public:
                KaxTagArchivalLocation() {}
                KaxTagArchivalLocation(const KaxTagArchivalLocation & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagArchivalLocation);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagArchivalLocation(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagArchivalLocation)
 };
 
 class MATROSKA_DLL_API KaxTagAudioEncryption : public EbmlBinary {
        public:
                KaxTagAudioEncryption() {}
                KaxTagAudioEncryption(const KaxTagAudioEncryption & ElementToClone) :EbmlBinary(ElementToClone){}
-               static EbmlElement & Create() {return *(new KaxTagAudioEncryption);}
                bool ValidateSize() const {return true;} // we don't mind about what's inside
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagAudioEncryption(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagAudioEncryption)
 };
 
 class MATROSKA_DLL_API KaxTagAudioGain : public EbmlFloat {
        public:
                KaxTagAudioGain() {}
                KaxTagAudioGain(const KaxTagAudioGain & ElementToClone) :EbmlFloat(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagAudioGain);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagAudioGain(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagAudioGain)
 };
 
 class MATROSKA_DLL_API KaxTagAudioGenre : public EbmlString {
        public:
                KaxTagAudioGenre() {}
                KaxTagAudioGenre(const KaxTagAudioGenre & ElementToClone) :EbmlString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagAudioGenre);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagAudioGenre(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagAudioGenre)
 };
 
 class MATROSKA_DLL_API KaxTagAudioPeak : public EbmlFloat {
        public:
                KaxTagAudioPeak() {}
                KaxTagAudioPeak(const KaxTagAudioPeak & ElementToClone) :EbmlFloat(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagAudioPeak);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagAudioPeak(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagAudioPeak)
 };
 
 class MATROSKA_DLL_API KaxTagBibliography : public EbmlUnicodeString {
        public:
                KaxTagBibliography() {}
                KaxTagBibliography(const KaxTagBibliography & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagBibliography);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagBibliography(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagBibliography)
 };
 
 class MATROSKA_DLL_API KaxTagBPM : public EbmlFloat {
        public:
                KaxTagBPM() {}
                KaxTagBPM(const KaxTagBPM & ElementToClone) :EbmlFloat(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagBPM);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagBPM(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagBPM)
 };
 
 class MATROSKA_DLL_API KaxTagCaptureDPI : public EbmlUInteger {
        public:
                KaxTagCaptureDPI() {}
                KaxTagCaptureDPI(const KaxTagCaptureDPI & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagCaptureDPI);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagCaptureDPI(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagCaptureDPI)
 };
 
 class MATROSKA_DLL_API KaxTagCaptureLightness : public EbmlBinary {
        public:
                KaxTagCaptureLightness() {}
                KaxTagCaptureLightness(const KaxTagCaptureLightness & ElementToClone) :EbmlBinary(ElementToClone){}
-               static EbmlElement & Create() {return *(new KaxTagCaptureLightness);}
                bool ValidateSize() const {return true;} // we don't mind about what's inside
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagCaptureLightness(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagCaptureLightness)
 };
 
 class MATROSKA_DLL_API KaxTagCapturePaletteSetting : public EbmlUInteger {
        public:
                KaxTagCapturePaletteSetting() {}
                KaxTagCapturePaletteSetting(const KaxTagCapturePaletteSetting & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagCapturePaletteSetting);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagCapturePaletteSetting(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagCapturePaletteSetting)
 };
 
 class MATROSKA_DLL_API KaxTagCaptureSharpness : public EbmlBinary {
        public:
                KaxTagCaptureSharpness() {}
                KaxTagCaptureSharpness(const KaxTagCaptureSharpness & ElementToClone) :EbmlBinary(ElementToClone){}
-               static EbmlElement & Create() {return *(new KaxTagCaptureSharpness);}
                bool ValidateSize() const {return true;} // we don't mind about what's inside
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagCaptureSharpness(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagCaptureSharpness)
 };
 
 class MATROSKA_DLL_API KaxTagCropped : public EbmlUnicodeString {
        public:
                KaxTagCropped() {}
                KaxTagCropped(const KaxTagCropped & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagCropped);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagCropped(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagCropped)
 };
 
 class MATROSKA_DLL_API KaxTagDiscTrack : public EbmlUInteger {
        public:
                KaxTagDiscTrack() {}
                KaxTagDiscTrack(const KaxTagDiscTrack & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagDiscTrack);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagDiscTrack(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagDiscTrack)
 };
 
 class MATROSKA_DLL_API KaxTagEncoder : public EbmlUnicodeString {
        public:
                KaxTagEncoder() {}
                KaxTagEncoder(const KaxTagEncoder & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagEncoder);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagEncoder(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagEncoder)
 };
 
 class MATROSKA_DLL_API KaxTagEncodeSettings : public EbmlUnicodeString {
        public:
                KaxTagEncodeSettings() {}
                KaxTagEncodeSettings(const KaxTagEncodeSettings & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagEncodeSettings);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagEncodeSettings(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagEncodeSettings)
 };
 
 class MATROSKA_DLL_API KaxTagEqualisation : public EbmlBinary {
        public:
                KaxTagEqualisation() {}
                KaxTagEqualisation(const KaxTagEqualisation & ElementToClone) :EbmlBinary(ElementToClone){}
-               static EbmlElement & Create() {return *(new KaxTagEqualisation);}
                bool ValidateSize() const {return true;} // we don't mind about what's inside
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagEqualisation(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagEqualisation)
 };
 
 class MATROSKA_DLL_API KaxTagFile : public EbmlUnicodeString {
        public:
                KaxTagFile() {}
                KaxTagFile(const KaxTagFile & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagFile);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagFile(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagFile)
 };
 
 class MATROSKA_DLL_API KaxTagInitialKey : public EbmlString {
        public:
                KaxTagInitialKey() {}
                KaxTagInitialKey(const KaxTagInitialKey & ElementToClone) :EbmlString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagInitialKey);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagInitialKey(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagInitialKey)
 };
 
 class MATROSKA_DLL_API KaxTagKeywords : public EbmlUnicodeString {
        public:
                KaxTagKeywords() {}
                KaxTagKeywords(const KaxTagKeywords & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagKeywords);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagKeywords(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagKeywords)
 };
 
 class MATROSKA_DLL_API KaxTagLanguage : public EbmlString {
        public:
                KaxTagLanguage() {}
                KaxTagLanguage(const KaxTagLanguage & ElementToClone) :EbmlString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagLanguage);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagLanguage(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagLanguage)
 };
 
 class MATROSKA_DLL_API KaxTagLength : public EbmlUInteger {
        public:
                KaxTagLength() {}
                KaxTagLength(const KaxTagLength & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagLength);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagLength(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagLength)
 };
 
 class MATROSKA_DLL_API KaxTagMood : public EbmlUnicodeString {
        public:
                KaxTagMood() {}
                KaxTagMood(const KaxTagMood & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMood);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMood(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMood)
 };
 
 class MATROSKA_DLL_API KaxTagOfficialAudioFileURL : public EbmlString {
        public:
                KaxTagOfficialAudioFileURL() {}
                KaxTagOfficialAudioFileURL(const KaxTagOfficialAudioFileURL & ElementToClone) :EbmlString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagOfficialAudioFileURL);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagOfficialAudioFileURL(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagOfficialAudioFileURL)
 };
 
 class MATROSKA_DLL_API KaxTagOfficialAudioSourceURL : public EbmlString {
        public:
                KaxTagOfficialAudioSourceURL() {}
                KaxTagOfficialAudioSourceURL(const KaxTagOfficialAudioSourceURL & ElementToClone) :EbmlString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagOfficialAudioSourceURL);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagOfficialAudioSourceURL(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagOfficialAudioSourceURL)
 };
 
 class MATROSKA_DLL_API KaxTagOriginalDimensions : public EbmlString {
        public:
                KaxTagOriginalDimensions() {}
                KaxTagOriginalDimensions(const KaxTagOriginalDimensions & ElementToClone) :EbmlString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagOriginalDimensions);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagOriginalDimensions(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagOriginalDimensions)
 };
 
 class MATROSKA_DLL_API KaxTagOriginalMediaType : public EbmlUnicodeString {
        public:
                KaxTagOriginalMediaType() {}
                KaxTagOriginalMediaType(const KaxTagOriginalMediaType & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagOriginalMediaType);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagOriginalMediaType(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagOriginalMediaType)
 };
 
 class MATROSKA_DLL_API KaxTagPlayCounter : public EbmlUInteger {
        public:
                KaxTagPlayCounter() {}
                KaxTagPlayCounter(const KaxTagPlayCounter & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagPlayCounter);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagPlayCounter(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagPlayCounter)
 };                      
 
 class MATROSKA_DLL_API KaxTagPlaylistDelay : public EbmlUInteger {
        public:
                KaxTagPlaylistDelay() {}
                KaxTagPlaylistDelay(const KaxTagPlaylistDelay & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagPlaylistDelay);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagPlaylistDelay(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagPlaylistDelay)
 };
 
 class MATROSKA_DLL_API KaxTagPopularimeter : public EbmlSInteger {
        public:
                KaxTagPopularimeter() {}
                KaxTagPopularimeter(const KaxTagPopularimeter & ElementToClone) :EbmlSInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagPopularimeter);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagPopularimeter(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagPopularimeter)
 };
 
 class MATROSKA_DLL_API KaxTagProduct : public EbmlUnicodeString {
        public:
                KaxTagProduct() {}
                KaxTagProduct(const KaxTagProduct & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagProduct);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagProduct(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagProduct)
 };
 
 class MATROSKA_DLL_API KaxTagRating : public EbmlBinary {
        public:
                KaxTagRating() {}
                KaxTagRating(const KaxTagRating & ElementToClone) :EbmlBinary(ElementToClone){}
-               static EbmlElement & Create() {return *(new KaxTagRating);}
                bool ValidateSize() const {return true;} // we don't mind about what's inside
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagRating(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagRating)
 };
 
 class MATROSKA_DLL_API KaxTagRecordLocation : public EbmlString {
        public:
                KaxTagRecordLocation() {}
                KaxTagRecordLocation(const KaxTagRecordLocation & ElementToClone) :EbmlString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagRecordLocation);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagRecordLocation(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagRecordLocation)
 };
 
 class MATROSKA_DLL_API KaxTagSetPart : public EbmlUInteger {
        public:
                KaxTagSetPart() {}
                KaxTagSetPart(const KaxTagSetPart & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagSetPart);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagSetPart(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagSetPart)
 };
 
 class MATROSKA_DLL_API KaxTagSource : public EbmlUnicodeString {
        public:
                KaxTagSource() {}
                KaxTagSource(const KaxTagSource & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagSource);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagSource(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagSource)
 };
 
 class MATROSKA_DLL_API KaxTagSourceForm : public EbmlUnicodeString {
        public:
                KaxTagSourceForm() {}
                KaxTagSourceForm(const KaxTagSourceForm & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagSourceForm);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagSourceForm(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagSourceForm)
 };
 
 class MATROSKA_DLL_API KaxTagSubGenre : public EbmlString {
        public:
                KaxTagSubGenre() {}
                KaxTagSubGenre(const KaxTagSubGenre & ElementToClone) :EbmlString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagSubGenre);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagSubGenre(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagSubGenre)
 };
 
 class MATROSKA_DLL_API KaxTagSubject : public EbmlUnicodeString {
        public:
                KaxTagSubject() {}
                KaxTagSubject(const KaxTagSubject & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagSubject);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagSubject(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagSubject)
 };
 
 class MATROSKA_DLL_API KaxTagUnsynchronisedText : public EbmlUnicodeString {
        public:
                KaxTagUnsynchronisedText() {}
                KaxTagUnsynchronisedText(const KaxTagUnsynchronisedText & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagUnsynchronisedText);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagUnsynchronisedText(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagUnsynchronisedText)
 };
 
 class MATROSKA_DLL_API KaxTagUserDefinedURL : public EbmlString {
        public:
                KaxTagUserDefinedURL() {}
                KaxTagUserDefinedURL(const KaxTagUserDefinedURL & ElementToClone) :EbmlString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagUserDefinedURL);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagUserDefinedURL(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagUserDefinedURL)
 };
 
 class MATROSKA_DLL_API KaxTagVideoGenre : public EbmlBinary {
        public:
                KaxTagVideoGenre() {}
                KaxTagVideoGenre(const KaxTagVideoGenre & ElementToClone) :EbmlBinary(ElementToClone){}
-               static EbmlElement & Create() {return *(new KaxTagVideoGenre);}
-               bool ValidateSize() const {return (Size >= 2);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagVideoGenre(*this);}
+               bool ValidateSize() const {return (GetSize() >= 2);}
+
+        EBML_CONCRETE_CLASS(KaxTagVideoGenre)
 };
 
 class MATROSKA_DLL_API KaxTagSimple : public EbmlMaster {
        public:
                KaxTagSimple();
                KaxTagSimple(const KaxTagSimple & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagSimple);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagSimple(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagSimple)
 };
 
 class MATROSKA_DLL_API KaxTagName : public EbmlUnicodeString {
        public:
                KaxTagName() {}
                KaxTagName(const KaxTagName & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagName);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagName(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagName)
 };
 
 class MATROSKA_DLL_API KaxTagLangue : public EbmlString {
        public:
                KaxTagLangue(): EbmlString("und") {}
                KaxTagLangue(const KaxTagLangue & ElementToClone) :EbmlString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagLangue);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagLangue(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagLangue)
 };
 
 class MATROSKA_DLL_API KaxTagDefault : public EbmlUInteger {
        public:
                KaxTagDefault() :EbmlUInteger(1) {}
                KaxTagDefault(const KaxTagTrackUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagDefault);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagDefault(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagDefault)
 };
 
 class MATROSKA_DLL_API KaxTagString : public EbmlUnicodeString {
        public:
                KaxTagString() {}
                KaxTagString(const KaxTagString & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagString);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagString(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagString)
 };
 
 class MATROSKA_DLL_API KaxTagBinary : public EbmlBinary {
        public:
                KaxTagBinary() {}
                KaxTagBinary(const KaxTagBinary & ElementToClone) :EbmlBinary(ElementToClone){}
-               static EbmlElement & Create() {return *(new KaxTagBinary);}
                bool ValidateSize() const {return true;} // {return (GetSize() >= 0);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagBinary(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagBinary)
 };
 
 END_LIBMATROSKA_NAMESPACE
index 36b7193692c2aa00742a67b3f625c2381f8c0264..09cd3a018c307933aee8c0b21473944b2797ac6d 100644 (file)
@@ -126,441 +126,321 @@ class MATROSKA_DLL_API KaxTagMultiComment : public EbmlMaster {
        public:
                KaxTagMultiComment();
                KaxTagMultiComment(const KaxTagMultiComment & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiComment);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiComment(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiComment)
 };
 
 class MATROSKA_DLL_API KaxTagMultiCommentName : public EbmlString {
        public:
                KaxTagMultiCommentName() {}
                KaxTagMultiCommentName(const KaxTagMultiCommentName & ElementToClone) :EbmlString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiCommentName);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiCommentName(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiCommentName)
 };
 
 class MATROSKA_DLL_API KaxTagMultiCommentComments : public EbmlUnicodeString {
        public:
                KaxTagMultiCommentComments() {}
                KaxTagMultiCommentComments(const KaxTagMultiCommentComments & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiCommentComments);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiCommentComments(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiCommentComments)
 };
 
 class MATROSKA_DLL_API KaxTagMultiCommentLanguage : public EbmlString {
        public:
                KaxTagMultiCommentLanguage() {}
                KaxTagMultiCommentLanguage(const KaxTagMultiCommentLanguage & ElementToClone) :EbmlString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiCommentLanguage);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiCommentLanguage(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiCommentLanguage)
 };
 
 class MATROSKA_DLL_API KaxTagMultiCommercial : public EbmlMaster {
        public:
                KaxTagMultiCommercial();
                KaxTagMultiCommercial(const KaxTagMultiCommercial & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiCommercial);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiCommercial(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiCommercial)
 };
 
 class MATROSKA_DLL_API KaxTagCommercial : public EbmlMaster {
        public:
                KaxTagCommercial();
                KaxTagCommercial(const KaxTagCommercial & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagCommercial);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagCommercial(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagCommercial)
 };
 
 class MATROSKA_DLL_API KaxTagMultiCommercialType : public EbmlUInteger {
        public:
                KaxTagMultiCommercialType() {}
                KaxTagMultiCommercialType(const KaxTagMultiCommercialType & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiCommercialType);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiCommercialType(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiCommercialType)
 };
 
 class MATROSKA_DLL_API KaxTagMultiCommercialAddress : public EbmlUnicodeString {
        public:
                KaxTagMultiCommercialAddress() {}
                KaxTagMultiCommercialAddress(const KaxTagMultiCommercialAddress & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiCommercialAddress);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiCommercialAddress(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiCommercialAddress)
 };
 
 class MATROSKA_DLL_API KaxTagMultiCommercialURL : public EbmlString {
        public:
                KaxTagMultiCommercialURL() {}
                KaxTagMultiCommercialURL(const KaxTagMultiCommercialURL & ElementToClone) :EbmlString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiCommercialURL);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiCommercialURL(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiCommercialURL)
 };
 
 class MATROSKA_DLL_API KaxTagMultiCommercialEmail : public EbmlString {
        public:
                KaxTagMultiCommercialEmail() {}
                KaxTagMultiCommercialEmail(const KaxTagMultiCommercialEmail & ElementToClone) :EbmlString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiCommercialEmail);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiCommercialEmail(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiCommercialEmail)
 };
 
 class MATROSKA_DLL_API KaxTagMultiPrice : public EbmlMaster {
        public:
                KaxTagMultiPrice();
                KaxTagMultiPrice(const KaxTagMultiPrice & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiPrice);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiPrice(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiPrice)
 };
 
 class MATROSKA_DLL_API KaxTagMultiPriceCurrency : public EbmlString {
        public:
                KaxTagMultiPriceCurrency() {}
                KaxTagMultiPriceCurrency(const KaxTagMultiPriceCurrency & ElementToClone) :EbmlString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiPriceCurrency);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiPriceCurrency(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiPriceCurrency)
 };
 
 class MATROSKA_DLL_API KaxTagMultiPriceAmount : public EbmlFloat {
        public:
                KaxTagMultiPriceAmount() :EbmlFloat() {}
                KaxTagMultiPriceAmount(const KaxTagMultiPriceAmount & ElementToClone) :EbmlFloat(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiPriceAmount);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiPriceAmount(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiPriceAmount)
 };
 
 class MATROSKA_DLL_API KaxTagMultiPricePriceDate : public EbmlDate {
        public:
                KaxTagMultiPricePriceDate() :EbmlDate() {}
                KaxTagMultiPricePriceDate(const KaxTagMultiPricePriceDate & ElementToClone) :EbmlDate(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiPricePriceDate);}                
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiPricePriceDate(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiPricePriceDate)
 };
 
 class MATROSKA_DLL_API KaxTagMultiDate : public EbmlMaster {
        public:
                KaxTagMultiDate();
                KaxTagMultiDate(const KaxTagMultiDate & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiDate);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiDate(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiDate)
 };
 
 class MATROSKA_DLL_API KaxTagDate : public EbmlMaster {
        public:
                KaxTagDate();
                KaxTagDate(const KaxTagDate & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagDate);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagDate(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagDate)
 };
 
 class MATROSKA_DLL_API KaxTagMultiDateType : public EbmlUInteger {
        public:
                KaxTagMultiDateType() {}
                KaxTagMultiDateType(const KaxTagMultiDateType & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiDateType);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiDateType(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiDateType)
 };
 
 class MATROSKA_DLL_API KaxTagMultiDateDateBegin : public EbmlDate {
        public:
                KaxTagMultiDateDateBegin() :EbmlDate() {}
                KaxTagMultiDateDateBegin(const KaxTagMultiDateDateBegin & ElementToClone) :EbmlDate(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiDateDateBegin);}         
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiDateDateBegin(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiDateDateBegin)
 };
 
 class MATROSKA_DLL_API KaxTagMultiDateDateEnd : public EbmlDate {
        public:
                KaxTagMultiDateDateEnd() :EbmlDate() {}
                KaxTagMultiDateDateEnd(const KaxTagMultiDateDateEnd & ElementToClone) :EbmlDate(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiDateDateEnd);}           
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiDateDateEnd(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiDateDateEnd)
 };
 
 class MATROSKA_DLL_API KaxTagMultiEntity : public EbmlMaster {
        public:
                KaxTagMultiEntity();
                KaxTagMultiEntity(const KaxTagMultiEntity & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiEntity);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiEntity(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiEntity)
 };
 
 class MATROSKA_DLL_API KaxTagEntity : public EbmlMaster {
        public:
                KaxTagEntity();
                KaxTagEntity(const KaxTagEntity & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagEntity);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagEntity(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagEntity)
 };
 
 class MATROSKA_DLL_API KaxTagMultiEntityType : public EbmlUInteger {
        public:
                KaxTagMultiEntityType() {}
                KaxTagMultiEntityType(const KaxTagMultiEntityType & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiEntityType);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiEntityType(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiEntityType)
 };
 
 class MATROSKA_DLL_API KaxTagMultiEntityName : public EbmlUnicodeString {
        public:
                KaxTagMultiEntityName() {}
                KaxTagMultiEntityName(const KaxTagMultiEntityName & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiEntityName);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiEntityName(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiEntityName)
 };
 
 class MATROSKA_DLL_API KaxTagMultiEntityAddress : public EbmlUnicodeString {
        public:
                KaxTagMultiEntityAddress() {}
                KaxTagMultiEntityAddress(const KaxTagMultiEntityAddress & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiEntityAddress);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiEntityAddress(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiEntityAddress)
 };
 
 class MATROSKA_DLL_API KaxTagMultiEntityURL : public EbmlString {
        public:
                KaxTagMultiEntityURL() {}
                KaxTagMultiEntityURL(const KaxTagMultiEntityURL & ElementToClone) :EbmlString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiEntityURL);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiEntityURL(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiEntityURL)
 };
 
 class MATROSKA_DLL_API KaxTagMultiEntityEmail : public EbmlString {
        public:
                KaxTagMultiEntityEmail() {}
                KaxTagMultiEntityEmail(const KaxTagMultiEntityEmail & ElementToClone) :EbmlString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiEntityEmail);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiEntityEmail(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiEntityEmail)
 };
 
 class MATROSKA_DLL_API KaxTagMultiIdentifier : public EbmlMaster {
        public:
                KaxTagMultiIdentifier();
                KaxTagMultiIdentifier(const KaxTagMultiIdentifier & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiIdentifier);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiIdentifier(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiIdentifier)
 };
 
 class MATROSKA_DLL_API KaxTagIdentifier : public EbmlMaster {
        public:
                KaxTagIdentifier();
                KaxTagIdentifier(const KaxTagIdentifier & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagIdentifier);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagIdentifier(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagIdentifier)
 };
 
 class MATROSKA_DLL_API KaxTagMultiIdentifierType : public EbmlUInteger {
        public:
                KaxTagMultiIdentifierType() {}
                KaxTagMultiIdentifierType(const KaxTagMultiIdentifierType & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiIdentifierType);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiIdentifierType(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiIdentifierType)
 };
 
 class MATROSKA_DLL_API KaxTagMultiIdentifierBinary : public EbmlBinary {
        public:
                KaxTagMultiIdentifierBinary() {}
                KaxTagMultiIdentifierBinary(const KaxTagMultiIdentifierBinary & ElementToClone) :EbmlBinary(ElementToClone){}
-               static EbmlElement & Create() {return *(new KaxTagMultiIdentifierBinary);}
                bool ValidateSize() const {return true;} // we don't mind about what's inside
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiIdentifierBinary(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiIdentifierBinary)
 };
 
 class MATROSKA_DLL_API KaxTagMultiIdentifierString : public EbmlUnicodeString {
        public:
                KaxTagMultiIdentifierString() {}
                KaxTagMultiIdentifierString(const KaxTagMultiIdentifierString & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiIdentifierString);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiIdentifierString(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiIdentifierString)
 };
 
 class MATROSKA_DLL_API KaxTagMultiLegal : public EbmlMaster {
        public:
                KaxTagMultiLegal();
                KaxTagMultiLegal(const KaxTagMultiLegal & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiLegal);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiLegal(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiLegal)
 };
 
 class MATROSKA_DLL_API KaxTagLegal : public EbmlMaster {
        public:
                KaxTagLegal();
                KaxTagLegal(const KaxTagLegal & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagLegal);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagLegal(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagLegal)
 };
 
 class MATROSKA_DLL_API KaxTagMultiLegalType : public EbmlUInteger {
        public:
                KaxTagMultiLegalType() {}
                KaxTagMultiLegalType(const KaxTagMultiLegalType & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiLegalType);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiLegalType(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiLegalType)
 };
 
 class MATROSKA_DLL_API KaxTagMultiLegalContent : public EbmlUnicodeString {
        public:
                KaxTagMultiLegalContent() {}
                KaxTagMultiLegalContent(const KaxTagMultiLegalContent & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiLegalContent);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiLegalContent(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiLegalContent)
 };
 
 class MATROSKA_DLL_API KaxTagMultiLegalURL : public EbmlString {
        public:
                KaxTagMultiLegalURL() {}
                KaxTagMultiLegalURL(const KaxTagMultiLegalURL & ElementToClone) :EbmlString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiLegalURL);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiLegalURL(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiLegalURL)
 };
 
 class MATROSKA_DLL_API KaxTagMultiLegalAddress : public EbmlUnicodeString {
        public:
                KaxTagMultiLegalAddress() {}
                KaxTagMultiLegalAddress(const KaxTagMultiLegalAddress & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiLegalAddress);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiLegalAddress(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiLegalAddress)
 };
 
 class MATROSKA_DLL_API KaxTagMultiTitle : public EbmlMaster {
        public:
                KaxTagMultiTitle();
                KaxTagMultiTitle(const KaxTagMultiTitle & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiTitle);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiTitle(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiTitle)
 };
 
 class MATROSKA_DLL_API KaxTagTitle : public EbmlMaster {
        public:
                KaxTagTitle();
                KaxTagTitle(const KaxTagTitle & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagTitle);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagTitle(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagTitle)
 };
 
 class MATROSKA_DLL_API KaxTagMultiTitleType : public EbmlUInteger {
        public:
                KaxTagMultiTitleType() {}
                KaxTagMultiTitleType(const KaxTagMultiTitleType & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiTitleType);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiTitleType(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiTitleType)
 };
 
 
@@ -568,176 +448,132 @@ class MATROSKA_DLL_API KaxTagMultiTitleName : public EbmlUnicodeString {
        public:
                KaxTagMultiTitleName() {}
                KaxTagMultiTitleName(const KaxTagMultiTitleName & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiTitleName);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiTitleName(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiTitleName)
 };
 
 class MATROSKA_DLL_API KaxTagMultiTitleSubTitle : public EbmlUnicodeString {
        public:
                KaxTagMultiTitleSubTitle() {}
                KaxTagMultiTitleSubTitle(const KaxTagMultiTitleSubTitle & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiTitleSubTitle);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiTitleSubTitle(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiTitleSubTitle)
 };
 
 class MATROSKA_DLL_API KaxTagMultiTitleEdition : public EbmlUnicodeString {
        public:
                KaxTagMultiTitleEdition() {}
                KaxTagMultiTitleEdition(const KaxTagMultiTitleEdition & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiTitleEdition);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiTitleEdition(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiTitleEdition)
 };
 
 class MATROSKA_DLL_API KaxTagMultiTitleAddress : public EbmlUnicodeString {
        public:
                KaxTagMultiTitleAddress() {}
                KaxTagMultiTitleAddress(const KaxTagMultiTitleAddress & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiTitleAddress);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiTitleAddress(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiTitleAddress)
 };
 
 class MATROSKA_DLL_API KaxTagMultiTitleURL : public EbmlString {
        public:
                KaxTagMultiTitleURL() {}
                KaxTagMultiTitleURL(const KaxTagMultiTitleURL & ElementToClone) :EbmlString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiTitleURL);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiTitleURL(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiTitleURL)
 };
 
 class MATROSKA_DLL_API KaxTagMultiTitleEmail : public EbmlString {
        public:
                KaxTagMultiTitleEmail() {}
                KaxTagMultiTitleEmail(const KaxTagMultiTitleEmail & ElementToClone) :EbmlString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiTitleEmail);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiTitleEmail(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiTitleEmail)
 };
 
 class MATROSKA_DLL_API KaxTagMultiTitleLanguage : public EbmlString {
        public:
                KaxTagMultiTitleLanguage() {}
                KaxTagMultiTitleLanguage(const KaxTagMultiTitleLanguage & ElementToClone) :EbmlString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiTitleLanguage);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiTitleLanguage(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiTitleLanguage)
 };
 
 class MATROSKA_DLL_API KaxTagMultiAttachment : public EbmlMaster {
        public:
                KaxTagMultiAttachment();
                KaxTagMultiAttachment(const KaxTagMultiAttachment & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagMultiAttachment);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagMultiAttachment(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagMultiAttachment)
 };
 
 class MATROSKA_DLL_API KaxTagAttachment : public EbmlMaster {
        public:
                KaxTagAttachment();
                KaxTagAttachment(const KaxTagAttachment & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagAttachment);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagAttachment(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagAttachment)
 };
 
 class MATROSKA_DLL_API KaxTagAttachmentID : public EbmlUInteger {
        public:
                KaxTagAttachmentID() {}
                KaxTagAttachmentID(const KaxTagAttachmentID & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTagAttachmentID);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTagAttachmentID(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTagAttachmentID)
 };
 
 #if 0
 class MATROSKA_DLL_API KaxTagBPM : public EbmlFloat {
        public:
                KaxTagBPM() :EbmlFloat() {}
-               static EbmlElement & Create() {return *(new KaxTagBPM);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+
+        EBML_CONCRETE_CLASS(KaxTagBPM)
 };
 
 class MATROSKA_DLL_API KaxTagPopularimeter : public EbmlSInteger {
        public:
                KaxTagPopularimeter() {}
-               static EbmlElement & Create() {return *(new KaxTagPopularimeter);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+
+        EBML_CONCRETE_CLASS(KaxTagPopularimeter)
 };
 
 class MATROSKA_DLL_API KaxTagRating : public EbmlBinary {
        public:
                KaxTagRating() {}
-               static EbmlElement & Create() {return *(new KaxTagRating);}
                bool ValidateSize() const {return true;} // we don't mind about what's inside
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+
+        EBML_CONCRETE_CLASS(KaxTagRating)
 };
 
 class MATROSKA_DLL_API KaxTagSetPart : public EbmlUInteger {
        public:
                KaxTagSetPart() {}
-               static EbmlElement & Create() {return *(new KaxTagSetPart);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+
+        EBML_CONCRETE_CLASS(KaxTagSetPart)
 };
 
 class MATROSKA_DLL_API KaxTagUserDefinedURL : public EbmlString {
        public:
                KaxTagUserDefinedURL() {}
-               static EbmlElement & Create() {return *(new KaxTagUserDefinedURL);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+
+        EBML_CONCRETE_CLASS(KaxTagUserDefinedURL)
 };
 
 class MATROSKA_DLL_API KaxTagVideoSecondaryGenre : public EbmlBinary {
        public:
                KaxTagVideoSecondaryGenre() {}
-               static EbmlElement & Create() {return *(new KaxTagVideoSecondaryGenre);}
                bool ValidateSize() const {return (Size >= 4);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+
+        EBML_CONCRETE_CLASS(KaxTagVideoSecondaryGenre)
 };
 
 class MATROSKA_DLL_API KaxWritingApp : public EbmlUnicodeString {
        public:
                KaxWritingApp() {}
-               static EbmlElement & Create() {return *(new KaxWritingApp);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
+
+        EBML_CONCRETE_CLASS(KaxWritingApp)
 };
 #endif
 
index f6c4375144d0bd7a142806f621f4cff8bff4d16e..87acaae395f91c9cbf2ab3bbffe7f9ed4e03d397 100644 (file)
@@ -46,11 +46,8 @@ class MATROSKA_DLL_API KaxTags : public EbmlMaster {
        public:
                KaxTags();
                KaxTags(const KaxTags & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTags);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTags(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTags)
 };
 
 END_LIBMATROSKA_NAMESPACE
index ffbe2595d2bc96bc09f99c8c759e3fb4f646d6c5..7c02a1fa0c34d1d89116168dae04dec8a99d94df 100644 (file)
@@ -49,44 +49,32 @@ class MATROSKA_DLL_API KaxTrackAudio : public EbmlMaster {
        public:
                KaxTrackAudio();
                KaxTrackAudio(const KaxTrackAudio & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTrackAudio);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTrackAudio(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTrackAudio)
 };
 
 class MATROSKA_DLL_API KaxAudioSamplingFreq : public EbmlFloat {
        public:
                KaxAudioSamplingFreq() :EbmlFloat(8000.0) {}
                KaxAudioSamplingFreq(const KaxAudioSamplingFreq & ElementToClone) :EbmlFloat(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxAudioSamplingFreq);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxAudioSamplingFreq(*this);}
+
+        EBML_CONCRETE_CLASS(KaxAudioSamplingFreq)
 };
 
 class MATROSKA_DLL_API KaxAudioOutputSamplingFreq : public EbmlFloat {
        public:
                KaxAudioOutputSamplingFreq() :EbmlFloat() {}
                KaxAudioOutputSamplingFreq(const KaxAudioOutputSamplingFreq & ElementToClone) :EbmlFloat(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxAudioOutputSamplingFreq);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxAudioOutputSamplingFreq(*this);}
+
+        EBML_CONCRETE_CLASS(KaxAudioOutputSamplingFreq)
 };
 
 class MATROSKA_DLL_API KaxAudioChannels : public EbmlUInteger {
        public:
                KaxAudioChannels() :EbmlUInteger(1) {}
                KaxAudioChannels(const KaxAudioChannels & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxAudioChannels);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxAudioChannels(*this);}
+
+        EBML_CONCRETE_CLASS(KaxAudioChannels)
 };
 
 #if MATROSKA_VERSION >= 2
@@ -94,12 +82,9 @@ class MATROSKA_DLL_API KaxAudioPosition : public EbmlBinary {
        public:
                KaxAudioPosition() {}
                KaxAudioPosition(const KaxAudioPosition & ElementToClone) :EbmlBinary(ElementToClone){}
-               static EbmlElement & Create() {return *(new KaxAudioPosition);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               bool ValidateSize(void) const {return true;}
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxAudioPosition(*this);}
+        bool ValidateSize(void) const {return true;}
+               
+        EBML_CONCRETE_CLASS(KaxAudioPosition)
 };
 #endif // MATROSKA_VERSION
 
@@ -107,11 +92,8 @@ class MATROSKA_DLL_API KaxAudioBitDepth : public EbmlUInteger {
        public:
                KaxAudioBitDepth() {}
                KaxAudioBitDepth(const KaxAudioBitDepth & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxAudioBitDepth);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxAudioBitDepth(*this);}
+
+        EBML_CONCRETE_CLASS(KaxAudioBitDepth)
 };
 
 END_LIBMATROSKA_NAMESPACE
index 0203ac8144f8c317b7abf837fed50b8e0119b238..155fa0e3433a1a86127051babaf4b389892503e5 100644 (file)
@@ -52,33 +52,24 @@ class MATROSKA_DLL_API KaxTrackNumber : public EbmlUInteger {
        public:
                KaxTrackNumber() {}
                KaxTrackNumber(const KaxTrackNumber & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTrackNumber);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTrackNumber(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTrackNumber)
 };
 
 class MATROSKA_DLL_API KaxTrackUID : public EbmlUInteger {
        public:
                KaxTrackUID() {}
                KaxTrackUID(const KaxTrackUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTrackUID);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTrackUID(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTrackUID)
 };
 
 class MATROSKA_DLL_API KaxTrackType : public EbmlUInteger {
        public:
                KaxTrackType() {}
                KaxTrackType(const KaxTrackType & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTrackType);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTrackType(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTrackType)
 };
 
 #if MATROSKA_VERSION >= 2
@@ -86,11 +77,8 @@ class MATROSKA_DLL_API KaxTrackFlagEnabled : public EbmlUInteger {
        public:
                KaxTrackFlagEnabled() :EbmlUInteger(1) {}
                KaxTrackFlagEnabled(const KaxTrackFlagEnabled & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTrackFlagEnabled);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTrackFlagEnabled(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTrackFlagEnabled)
 };
 #endif // MATROSKA_VERSION
 
@@ -98,212 +86,155 @@ class MATROSKA_DLL_API KaxTrackFlagDefault : public EbmlUInteger {
        public:
                KaxTrackFlagDefault() :EbmlUInteger(1) {}
                KaxTrackFlagDefault(const KaxTrackFlagDefault & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTrackFlagDefault);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTrackFlagDefault(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTrackFlagDefault)
 };
 
 class MATROSKA_DLL_API KaxTrackFlagForced : public EbmlUInteger {
        public:
                KaxTrackFlagForced() :EbmlUInteger(0) {}
                KaxTrackFlagForced(const KaxTrackFlagForced & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTrackFlagForced);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTrackFlagForced(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTrackFlagForced)
 };
 
 class MATROSKA_DLL_API KaxTrackFlagLacing : public EbmlUInteger {
        public:
                KaxTrackFlagLacing() :EbmlUInteger(1) {}
                KaxTrackFlagLacing(const KaxTrackFlagLacing & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTrackFlagLacing);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTrackFlagLacing(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTrackFlagLacing)
 };
 
 class MATROSKA_DLL_API KaxTrackMinCache : public EbmlUInteger {
        public:
                KaxTrackMinCache() :EbmlUInteger(0) {}
                KaxTrackMinCache(const KaxTrackMinCache & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTrackMinCache);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTrackMinCache(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTrackMinCache)
 };
 
 class MATROSKA_DLL_API KaxTrackMaxCache : public EbmlUInteger {
        public:
                KaxTrackMaxCache() {}
                KaxTrackMaxCache(const KaxTrackMaxCache & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTrackMaxCache);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTrackMaxCache(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTrackMaxCache)
 };
 
 class MATROSKA_DLL_API KaxTrackDefaultDuration : public EbmlUInteger {
        public:
                KaxTrackDefaultDuration() {}
                KaxTrackDefaultDuration(const KaxTrackDefaultDuration & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTrackDefaultDuration);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTrackDefaultDuration(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTrackDefaultDuration)
 };
 
 class MATROSKA_DLL_API KaxTrackTimecodeScale : public EbmlFloat {
        public:
                KaxTrackTimecodeScale() :EbmlFloat(1.0) {}
                KaxTrackTimecodeScale(const KaxTrackTimecodeScale & ElementToClone) :EbmlFloat(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTrackTimecodeScale);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTrackTimecodeScale(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTrackTimecodeScale)
 };
 
 class MATROSKA_DLL_API KaxMaxBlockAdditionID : public EbmlUInteger {
        public:
                KaxMaxBlockAdditionID() :EbmlUInteger(0) {}
                KaxMaxBlockAdditionID(const KaxMaxBlockAdditionID & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxMaxBlockAdditionID);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxMaxBlockAdditionID(*this);}
+
+        EBML_CONCRETE_CLASS(KaxMaxBlockAdditionID)
 };
 
 class MATROSKA_DLL_API KaxTrackName : public EbmlUnicodeString {
        public:
                KaxTrackName() {}
                KaxTrackName(const KaxTrackName & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTrackName);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTrackName(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTrackName)
 };
 
 class MATROSKA_DLL_API KaxTrackLanguage : public EbmlString {
        public:
                KaxTrackLanguage() :EbmlString("eng") {}
                KaxTrackLanguage(const KaxTrackLanguage & ElementToClone) :EbmlString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTrackLanguage);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTrackLanguage(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTrackLanguage)
 };
 
 class MATROSKA_DLL_API KaxCodecID : public EbmlString {
        public:
                KaxCodecID() {}
                KaxCodecID(const KaxCodecID & ElementToClone) :EbmlString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxCodecID);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxCodecID(*this);}
+
+        EBML_CONCRETE_CLASS(KaxCodecID)
 };
 
 class MATROSKA_DLL_API KaxCodecPrivate : public EbmlBinary {
        public:
                KaxCodecPrivate() {}
                KaxCodecPrivate(const KaxCodecPrivate & ElementToClone) :EbmlBinary(ElementToClone){}
-               static EbmlElement & Create() {return *(new KaxCodecPrivate);}
                bool ValidateSize() const {return true;} // we don't mind about what's inside
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxCodecPrivate(*this);}
+
+        EBML_CONCRETE_CLASS(KaxCodecPrivate)
 };
 
 class MATROSKA_DLL_API KaxCodecName : public EbmlUnicodeString {
        public:
                KaxCodecName() {}
                KaxCodecName(const KaxCodecName & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxCodecName);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxCodecName(*this);}
+
+        EBML_CONCRETE_CLASS(KaxCodecName)
 };
 
 class MATROSKA_DLL_API KaxTrackAttachmentLink : public EbmlBinary {
        public:
                KaxTrackAttachmentLink() {}
                KaxTrackAttachmentLink(const KaxTrackAttachmentLink & ElementToClone) :EbmlBinary(ElementToClone){}
-               static EbmlElement & Create() {return *(new KaxTrackAttachmentLink);}
                bool ValidateSize() const {return true;} // we don't mind about what's inside
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTrackAttachmentLink(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTrackAttachmentLink)
 };
 
 class MATROSKA_DLL_API KaxTrackOverlay : public EbmlUInteger {
        public:
                KaxTrackOverlay() {}
                KaxTrackOverlay(const KaxTrackOverlay & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTrackOverlay);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTrackOverlay(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTrackOverlay)
 };
 
 class MATROSKA_DLL_API KaxTrackTranslate : public EbmlMaster {
        public:
                KaxTrackTranslate();
                KaxTrackTranslate(const KaxTrackTranslate & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTrackTranslate);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTrackTranslate(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTrackTranslate)
 };
 
 class MATROSKA_DLL_API KaxTrackTranslateCodec : public EbmlUInteger {
        public:
                KaxTrackTranslateCodec() {}
                KaxTrackTranslateCodec(const KaxTrackTranslateCodec & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTrackTranslateCodec);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTrackTranslateCodec(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTrackTranslateCodec)
 };
 
 class MATROSKA_DLL_API KaxTrackTranslateEditionUID : public EbmlUInteger {
        public:
                KaxTrackTranslateEditionUID() {}
                KaxTrackTranslateEditionUID(const KaxTrackTranslateEditionUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTrackTranslateEditionUID);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTrackTranslateEditionUID(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTrackTranslateEditionUID)
 };
 
 class MATROSKA_DLL_API KaxTrackTranslateTrackID : public EbmlBinary {
        public:
                KaxTrackTranslateTrackID() {}
                KaxTrackTranslateTrackID(const KaxTrackTranslateTrackID & ElementToClone) :EbmlBinary(ElementToClone){}
-               static EbmlElement & Create() {return *(new KaxTrackTranslateTrackID);}
                bool ValidateSize() const { return true;}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTrackTranslateTrackID(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTrackTranslateTrackID)
 };
 
 #if MATROSKA_VERSION >= 2
@@ -311,44 +242,32 @@ class MATROSKA_DLL_API KaxCodecSettings : public EbmlUnicodeString {
        public:
                KaxCodecSettings() {}
                KaxCodecSettings(const KaxCodecSettings & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxCodecSettings);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxCodecSettings(*this);}
+
+        EBML_CONCRETE_CLASS(KaxCodecSettings)
 };
 
 class MATROSKA_DLL_API KaxCodecInfoURL : public EbmlString {
        public:
                KaxCodecInfoURL() {}
                KaxCodecInfoURL(const KaxCodecInfoURL & ElementToClone) :EbmlString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxCodecInfoURL);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxCodecInfoURL(*this);}
+               
+        EBML_CONCRETE_CLASS(KaxCodecInfoURL)
 };
 
 class MATROSKA_DLL_API KaxCodecDownloadURL : public EbmlString {
        public:
                KaxCodecDownloadURL() {}
                KaxCodecDownloadURL(const KaxCodecDownloadURL & ElementToClone) :EbmlString(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxCodecDownloadURL);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxCodecDownloadURL(*this);}
+
+        EBML_CONCRETE_CLASS(KaxCodecDownloadURL)
 };
 
 class MATROSKA_DLL_API KaxCodecDecodeAll : public EbmlUInteger {
        public:
                KaxCodecDecodeAll() :EbmlUInteger(1) {}
                KaxCodecDecodeAll(const KaxCodecDecodeAll & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxCodecDecodeAll);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxCodecDecodeAll(*this);}
+
+        EBML_CONCRETE_CLASS(KaxCodecDecodeAll)
 };
 #endif // MATROSKA_VERSION
 
index 9a2678cd40d5ad3e2545d897b613af46fc7bbc75..e50d2fbb7cdb9c8fb13229c4ae4f36a6ef753f6f 100644 (file)
@@ -49,11 +49,8 @@ class MATROSKA_DLL_API KaxTrackVideo : public EbmlMaster {
        public:
                KaxTrackVideo();
                KaxTrackVideo(const KaxTrackVideo & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTrackVideo);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTrackVideo(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTrackVideo)
 };
 
 #if MATROSKA_VERSION >= 2
@@ -61,22 +58,16 @@ class MATROSKA_DLL_API KaxVideoFlagInterlaced : public EbmlUInteger {
        public:
                KaxVideoFlagInterlaced() :EbmlUInteger(0) {}
                KaxVideoFlagInterlaced(const KaxVideoFlagInterlaced & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxVideoFlagInterlaced);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxVideoFlagInterlaced(*this);}
+
+        EBML_CONCRETE_CLASS(KaxVideoFlagInterlaced)
 };
 
 class MATROSKA_DLL_API KaxVideoStereoMode : public EbmlUInteger {
        public:
                KaxVideoStereoMode() :EbmlUInteger(0) {}
                KaxVideoStereoMode(const KaxVideoStereoMode & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxVideoStereoMode);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxVideoStereoMode(*this);}
+
+        EBML_CONCRETE_CLASS(KaxVideoStereoMode)
 };
 #endif // MATROSKA_VERSION
 
@@ -84,88 +75,64 @@ class MATROSKA_DLL_API KaxVideoPixelWidth : public EbmlUInteger {
        public:
                KaxVideoPixelWidth() {}
                KaxVideoPixelWidth(const KaxVideoPixelWidth & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxVideoPixelWidth);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxVideoPixelWidth(*this);}
+
+        EBML_CONCRETE_CLASS(KaxVideoPixelWidth)
 };
 
 class MATROSKA_DLL_API KaxVideoPixelHeight : public EbmlUInteger {
        public:
                KaxVideoPixelHeight() {}
                KaxVideoPixelHeight(const KaxVideoPixelHeight & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxVideoPixelHeight);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxVideoPixelHeight(*this);}
+
+        EBML_CONCRETE_CLASS(KaxVideoPixelHeight)
 };
 
 class MATROSKA_DLL_API KaxVideoPixelCropBottom : public EbmlUInteger {
        public:
                KaxVideoPixelCropBottom(): EbmlUInteger(0) {}
                KaxVideoPixelCropBottom(const KaxVideoPixelCropBottom & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxVideoPixelCropBottom);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxVideoPixelCropBottom(*this);}
+
+        EBML_CONCRETE_CLASS(KaxVideoPixelCropBottom)
 };
 
 class MATROSKA_DLL_API KaxVideoPixelCropTop : public EbmlUInteger {
        public:
                KaxVideoPixelCropTop(): EbmlUInteger(0) {}
                KaxVideoPixelCropTop(const KaxVideoPixelCropTop & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxVideoPixelCropTop);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxVideoPixelCropTop(*this);}
+
+        EBML_CONCRETE_CLASS(KaxVideoPixelCropTop)
 };
 
 class MATROSKA_DLL_API KaxVideoPixelCropLeft : public EbmlUInteger {
        public:
                KaxVideoPixelCropLeft(): EbmlUInteger(0) {}
                KaxVideoPixelCropLeft(const KaxVideoPixelCropLeft & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxVideoPixelCropLeft);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxVideoPixelCropLeft(*this);}
+
+        EBML_CONCRETE_CLASS(KaxVideoPixelCropLeft)
 };
 
 class MATROSKA_DLL_API KaxVideoPixelCropRight : public EbmlUInteger {
        public:
                KaxVideoPixelCropRight(): EbmlUInteger(0) {}
                KaxVideoPixelCropRight(const KaxVideoPixelCropRight & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxVideoPixelCropRight);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxVideoPixelCropRight(*this);}
+
+        EBML_CONCRETE_CLASS(KaxVideoPixelCropRight)
 };
 
 class MATROSKA_DLL_API KaxVideoDisplayWidth : public EbmlUInteger {
        public:
                KaxVideoDisplayWidth() {}
                KaxVideoDisplayWidth(const KaxVideoDisplayWidth & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxVideoDisplayWidth);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxVideoDisplayWidth(*this);}
+
+        EBML_CONCRETE_CLASS(KaxVideoDisplayWidth)
 };
 
 class MATROSKA_DLL_API KaxVideoDisplayHeight : public EbmlUInteger {
        public:
                KaxVideoDisplayHeight() {}
                KaxVideoDisplayHeight(const KaxVideoDisplayHeight & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxVideoDisplayHeight);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxVideoDisplayHeight(*this);}
+
+        EBML_CONCRETE_CLASS(KaxVideoDisplayHeight)
 };
 
 #if MATROSKA_VERSION >= 2
@@ -173,22 +140,16 @@ class MATROSKA_DLL_API KaxVideoDisplayUnit : public EbmlUInteger {
        public:
                KaxVideoDisplayUnit() {}
                KaxVideoDisplayUnit(const KaxVideoDisplayUnit & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxVideoDisplayUnit);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxVideoDisplayUnit(*this);}
+
+        EBML_CONCRETE_CLASS(KaxVideoDisplayUnit)
 };
 
 class MATROSKA_DLL_API KaxVideoAspectRatio : public EbmlUInteger {
        public:
                KaxVideoAspectRatio() {}
                KaxVideoAspectRatio(const KaxVideoAspectRatio & ElementToClone) :EbmlUInteger(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxVideoAspectRatio);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxVideoAspectRatio(*this);}
+
+        EBML_CONCRETE_CLASS(KaxVideoAspectRatio)
 };
 #endif // MATROSKA_VERSION
 
@@ -196,12 +157,9 @@ class MATROSKA_DLL_API KaxVideoColourSpace : public EbmlBinary {
        public:
                KaxVideoColourSpace() {}
                KaxVideoColourSpace(const KaxVideoColourSpace & ElementToClone) :EbmlBinary(ElementToClone){}
-               static EbmlElement & Create() {return *(new KaxVideoColourSpace);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
         bool ValidateSize(void) const {return (GetSize() == 4);}
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxVideoColourSpace(*this);}
+
+        EBML_CONCRETE_CLASS(KaxVideoColourSpace)
 };
 
 #if MATROSKA_VERSION >= 2
@@ -209,11 +167,8 @@ class MATROSKA_DLL_API KaxVideoGamma : public EbmlFloat {
        public:
                KaxVideoGamma() {}
                KaxVideoGamma(const KaxVideoGamma & ElementToClone) :EbmlFloat(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxVideoGamma);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxVideoGamma(*this);}
+
+        EBML_CONCRETE_CLASS(KaxVideoGamma)
 };
 #endif // MATROSKA_VERSION
 
@@ -221,12 +176,9 @@ class MATROSKA_DLL_API KaxVideoFrameRate : public EbmlFloat {
        public:
                KaxVideoFrameRate() {}
                KaxVideoFrameRate(const KaxVideoFrameRate & ElementToClone) :EbmlFloat(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxVideoFrameRate);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
                uint32 RenderData(IOCallback & output, bool bForceRender, bool bSaveDefault);
-               EbmlElement * Clone() const {return new KaxVideoFrameRate(*this);}
+
+        EBML_CONCRETE_CLASS(KaxVideoFrameRate)
 };
 
 
index bd2224cf897ac24e19e8e457d30adea4fa712a90..3b52524ca39f5c71301f28b753d00e1c547d2bc1 100644 (file)
@@ -48,22 +48,14 @@ class MATROSKA_DLL_API KaxTracks : public EbmlMaster {
        public:
                KaxTracks();
                KaxTracks(const KaxTracks & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTracks);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTracks(*this);}
+
+        EBML_CONCRETE_CLASS(KaxTracks)
 };
 
 class MATROSKA_DLL_API KaxTrackEntry : public EbmlMaster {
        public:
                KaxTrackEntry();
                KaxTrackEntry(const KaxTrackEntry & ElementToClone) :EbmlMaster(ElementToClone) {}
-               static EbmlElement & Create() {return *(new KaxTrackEntry);}
-               const EbmlCallbacks & Generic() const {return ClassInfos;}
-               static const EbmlCallbacks ClassInfos;
-               operator const EbmlId &() const {return ClassInfos.GlobalId;}
-               EbmlElement * Clone() const {return new KaxTrackEntry(*this);}
 
                EbmlUInteger & TrackNumber() const { return *(static_cast<EbmlUInteger *>(FindElt(EBML_INFO(KaxTrackNumber)))); }
 
@@ -89,6 +81,8 @@ class MATROSKA_DLL_API KaxTrackEntry : public EbmlMaster {
        protected:
                bool   bGlobalTimecodeScaleIsSet;
                uint64 mGlobalTimecodeScale;
+
+        EBML_CONCRETE_CLASS(KaxTrackEntry)
 };
 
 END_LIBMATROSKA_NAMESPACE