00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00036 #ifndef LIBEBML_ID_H
00037 #define LIBEBML_ID_H
00038
00039 #include "EbmlTypes.h"
00040
00041 START_LIBEBML_NAMESPACE
00042
00043
00044 #if defined(EBML_STRICT_API)
00045 #define EBML_ID_VALUE(id) (id).GetValue()
00046 #define EBML_ID_LENGTH(id) (id).GetLength()
00047 #else
00048 #define EBML_ID_VALUE(id) (id).Value
00049 #define EBML_ID_LENGTH(id) (id).Length
00050 #endif
00051
00055 class EBML_DLL_API EbmlId {
00056 public:
00057 EbmlId(const binary aValue[4], const unsigned int aLength)
00058 :Length(aLength)
00059 {
00060 Value = 0;
00061 unsigned int i;
00062 for (i=0; i<aLength; i++) {
00063 Value <<= 8;
00064 Value += aValue[i];
00065 }
00066 }
00067
00068 EbmlId(const uint32 aValue, const unsigned int aLength)
00069 :Value(aValue), Length(aLength) {}
00070
00071 inline bool operator==(const EbmlId & TestId) const
00072 {
00073 return ((TestId.Length == Length) && (TestId.Value == Value));
00074 }
00075 inline bool operator!=(const EbmlId & TestId) const
00076 {
00077 return !(*this == TestId);
00078 }
00079
00080 inline void Fill(binary * Buffer) const {
00081 unsigned int i;
00082 for (i = 0; i<Length; i++) {
00083 Buffer[i] = (Value >> (8*(Length-i-1))) & 0xFF;
00084 }
00085 }
00086
00087 inline size_t GetLength() const { return Length; }
00088 inline uint32 GetValue() const { return Value; }
00089
00090 #if defined(EBML_STRICT_API)
00091 private:
00092 #endif
00093 uint32 Value;
00094 size_t Length;
00095 };
00096
00097 END_LIBEBML_NAMESPACE
00098
00099 #endif // LIBEBML_ID_H