00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef MXFLIB__MDTRAITS_H
00030 #define MXFLIB__MDTRAITS_H
00031
00032 namespace mxflib
00033 {
00034
00035 class MDTraits;
00036
00038 typedef SmartPtr<MDTraits> MDTraitsPtr;
00039
00041 typedef std::list<MDTraitsPtr> MDTraitsList;
00042
00044 typedef std::map<std::string, MDTraitsPtr> MDTraitsMap;
00045 }
00046
00047
00048 namespace mxflib
00049 {
00051
00058 extern UInt32 MDTraits_StringLimit;
00059
00061 inline void SetStringLimit(UInt32 StringLimit) { MDTraits_StringLimit = StringLimit; }
00062
00064 inline UInt32 GetStringLimit(void) { return MDTraits_StringLimit; }
00065 }
00066
00067
00068 namespace mxflib
00069 {
00071
00073 extern bool TerminateStrings;
00074
00076 inline void SetStringTermination(bool Value) { TerminateStrings = Value; }
00077
00079 inline bool GetStringTermination(void) { return TerminateStrings; }
00080
00082 enum LabelFormat
00083 {
00084 LabelFormatText = 0,
00085 LabelFormatHex,
00086 LabelFormatTextHex,
00087 LabelFormatTextHexMask
00088 };
00089
00091 extern LabelFormat LabelFormatOption;
00092
00094 inline void SetLabelFormat(LabelFormat Value) { LabelFormatOption = Value; }
00095
00097 inline LabelFormat GetLabelFormat(void) { return LabelFormatOption; }
00098 }
00099
00100
00101 namespace mxflib
00102 {
00103 class MDTraits : public RefCount<MDTraits>
00104 {
00105 protected:
00107 static MDTraitsMap AllTraits;
00108
00110 MDTraits() {};
00111
00112 public:
00114 virtual ~MDTraits() {}
00115
00117
00118 virtual bool HandlesSubdata(void) const { return false; };
00119
00121 virtual std::string Name() const = 0;
00122
00123
00124 public:
00126
00128 static bool Add(std::string Name, MDTraitsPtr Trait);
00129
00131
00133 static bool Replace(std::string Name, MDTraitsPtr Trait);
00134
00136
00138 static MDTraitsPtr Find(std::string Name);
00139
00140
00141 protected:
00142 virtual void SetInt(MDValuePtr Object, Int32 Val);
00143 virtual void SetInt64(MDValuePtr Object, Int64 Val);
00144 virtual void SetUInt(MDValuePtr Object, UInt32 Val);
00145 virtual void SetUInt64(MDValuePtr Object, UInt64 Val);
00146 virtual void SetString(MDValuePtr Object, std::string Val);
00147 virtual Int32 GetInt(MDValuePtr Object);
00148 virtual Int64 GetInt64(MDValuePtr Object);
00149 virtual UInt32 GetUInt(MDValuePtr Object);
00150 virtual UInt64 GetUInt64(MDValuePtr Object);
00151 virtual std::string GetString(MDValuePtr Object);
00152
00153 virtual size_t ReadValue(MDValuePtr Object, const UInt8 *Buffer, size_t Size, int Count=0);
00154
00156 inline void SetUint(MDValuePtr Object, UInt32 Val) { SetUInt(Object, Val); }
00157
00159 inline void SetUint64(MDValuePtr Object, UInt64 Val) { SetUInt64(Object, Val); }
00160
00162 inline UInt32 GetUint(MDValuePtr Object) { return GetUInt(Object); }
00163
00165 inline UInt64 GetUint64(MDValuePtr Object) { return GetUInt64(Object); }
00166
00167
00168 friend class MDValue;
00169 };
00170
00172
00174 template<class C> std::string CreateMDTraits(void)
00175 {
00176 MDTraitsPtr Tr = new C;
00177 MDTraits::Add(Tr->Name(), Tr );
00178 return Tr->Name();
00179 }
00180
00181 class MDTraits_DefaultTraits : public MDTraits
00182 {
00183 public:
00185 virtual std::string Name() const { return "mxflib::MDTraits_DefaultTraits"; };
00186 };
00187
00188
00189 class MDTraits_BasicInt : public MDTraits
00190 {
00191 public:
00193 virtual std::string Name() const { return "mxflib::MDTraits_BasicInt"; };
00194
00195 protected:
00196 virtual void SetInt64(MDValuePtr Object, Int64 Val);
00197 virtual void SetUInt(MDValuePtr Object, UInt32 Val);
00198 virtual void SetUInt64(MDValuePtr Object, UInt64 Val);
00199 virtual void SetString(MDValuePtr Object, std::string Val);
00200 virtual Int64 GetInt64(MDValuePtr Object);
00201 virtual UInt64 GetUInt64(MDValuePtr Object);
00202 virtual std::string GetString(MDValuePtr Object);
00203
00204 virtual size_t ReadValue(MDValuePtr Object, const UInt8 *Buffer, size_t Size, int Count=0);
00205 };
00206
00208 size_t ReadValueUInt(MDValuePtr Object, const UInt8 *Buffer, size_t Size, int Count=0);
00209
00210 class MDTraits_Int8 : public MDTraits_BasicInt
00211 {
00212 public:
00214 virtual std::string Name() const { return "mxflib::MDTraits_Int8"; };
00215
00216 protected:
00217 virtual void SetInt(MDValuePtr Object, Int32 Val);
00218 virtual Int32 GetInt(MDValuePtr Object);
00219 virtual UInt32 GetUInt(MDValuePtr Object);
00220 };
00221
00222 class MDTraits_UInt8 : public MDTraits_Int8
00223 {
00224 public:
00226 virtual std::string Name() const { return "mxflib::MDTraits_UInt8"; };
00227
00228 protected:
00229 virtual std::string GetString(MDValuePtr Object);
00230 virtual size_t ReadValue(MDValuePtr Object, const UInt8 *Buffer, size_t Size, int Count=0);
00231 };
00232
00233 class MDTraits_Int16 : public MDTraits_BasicInt
00234 {
00235 public:
00237 virtual std::string Name() const { return "mxflib::MDTraits_Int16"; };
00238
00239 protected:
00240 virtual void SetInt(MDValuePtr Object, Int32 Val);
00241 virtual Int32 GetInt(MDValuePtr Object);
00242 virtual UInt32 GetUInt(MDValuePtr Object);
00243 };
00244
00245 class MDTraits_UInt16 : public MDTraits_Int16
00246 {
00247 public:
00249 virtual std::string Name() const { return "mxflib::MDTraits_UInt16"; };
00250
00251 protected:
00252 virtual std::string GetString(MDValuePtr Object);
00253 virtual size_t ReadValue(MDValuePtr Object, const UInt8 *Buffer, size_t Size, int Count=0);
00254 };
00255
00256 class MDTraits_Int32 : public MDTraits_BasicInt
00257 {
00258 public:
00260 virtual std::string Name() const { return "mxflib::MDTraits_Int32"; };
00261
00262 protected:
00263 virtual void SetInt(MDValuePtr Object, Int32 Val);
00264 virtual Int32 GetInt(MDValuePtr Object);
00265 virtual UInt32 GetUInt(MDValuePtr Object);
00266 };
00267
00268 class MDTraits_UInt32 : public MDTraits_Int32
00269 {
00270 public:
00272 virtual std::string Name() const { return "mxflib::MDTraits_UInt32"; };
00273
00274 protected:
00275 virtual std::string GetString(MDValuePtr Object);
00276 virtual size_t ReadValue(MDValuePtr Object, const UInt8 *Buffer, size_t Size, int Count=0);
00277 };
00278
00279 class MDTraits_Int64 : public MDTraits
00280 {
00281 public:
00283 virtual std::string Name() const { return "mxflib::MDTraits_Int64"; };
00284
00285 protected:
00286 virtual void SetInt(MDValuePtr Object, Int32 Val);
00287 virtual void SetInt64(MDValuePtr Object, Int64 Val);
00288 virtual void SetUInt(MDValuePtr Object, UInt32 Val);
00289 virtual void SetUInt64(MDValuePtr Object, UInt64 Val);
00290 virtual void SetString(MDValuePtr Object, std::string Val);
00291 virtual Int32 GetInt(MDValuePtr Object);
00292 virtual UInt32 GetUInt(MDValuePtr Object);
00293 virtual Int64 GetInt64(MDValuePtr Object);
00294 virtual UInt64 GetUInt64(MDValuePtr Object);
00295 virtual std::string GetString(MDValuePtr Object);
00296 };
00297
00298 class MDTraits_UInt64 : public MDTraits_Int64
00299 {
00300 public:
00302 virtual std::string Name() const { return "mxflib::MDTraits_UInt64"; };
00303
00304 protected:
00305 virtual std::string GetString(MDValuePtr Object);
00306 virtual size_t ReadValue(MDValuePtr Object, const UInt8 *Buffer, size_t Size, int Count=0);
00307 };
00308
00309 class MDTraits_ISO7 : public MDTraits_UInt8
00310 {
00311 public:
00313 virtual std::string Name() const { return "mxflib::MDTraits_ISO7"; };
00314
00315 protected:
00316 virtual void SetString(MDValuePtr Object, std::string Val);
00317 virtual std::string GetString(MDValuePtr Object);
00318 };
00319
00320 class MDTraits_UTF16 : public MDTraits_UInt16
00321 {
00322 public:
00324 virtual std::string Name() const { return "mxflib::MDTraits_UTF16"; };
00325
00326 protected:
00327 virtual void SetString(MDValuePtr Object, std::string Val);
00328 virtual std::string GetString(MDValuePtr Object);
00329 };
00330
00331 class MDTraits_Raw : public MDTraits
00332 {
00333 public:
00335 virtual std::string Name() const { return "mxflib::MDTraits_Raw"; };
00336
00338
00339 virtual bool HandlesSubdata(void) const { return false; };
00340
00341 protected:
00342
00343 virtual void SetString(MDValuePtr Object, std::string Val);
00344 virtual Int32 GetInt(MDValuePtr Object);
00345 virtual Int64 GetInt64(MDValuePtr Object);
00346 virtual UInt32 GetUInt(MDValuePtr Object);
00347 virtual UInt64 GetUInt64(MDValuePtr Object);
00348 virtual std::string GetString(MDValuePtr Object);
00349
00350 virtual size_t ReadValue(MDValuePtr Object, const UInt8 *Buffer, size_t Size, int Count=0);
00351 };
00352
00353
00354 class MDTraits_BasicArray : public MDTraits
00355 {
00356 public:
00358 virtual std::string Name() const { return "mxflib::MDTraits_BasicArray"; };
00359
00360 protected:
00361 virtual void SetInt(MDValuePtr Object, Int32 Val);
00362 virtual void SetInt64(MDValuePtr Object, Int64 Val);
00363 virtual void SetUInt(MDValuePtr Object, UInt32 Val);
00364 virtual void SetUInt64(MDValuePtr Object, UInt64 Val);
00365 virtual void SetString(MDValuePtr Object, std::string Val);
00366 virtual Int32 GetInt(MDValuePtr Object);
00367 virtual Int64 GetInt64(MDValuePtr Object);
00368 virtual UInt32 GetUInt(MDValuePtr Object);
00369 virtual UInt64 GetUInt64(MDValuePtr Object);
00370 virtual std::string GetString(MDValuePtr Object);
00371
00372 virtual size_t ReadValue(MDValuePtr Object, const UInt8 *Buffer, size_t Size, int Count=0);
00373 };
00374
00375 class MDTraits_BasicStringArray : public MDTraits_BasicArray
00376 {
00377 public:
00379 virtual std::string Name() const { return "mxflib::MDTraits_BasicStringArray"; };
00380
00381 protected:
00382 virtual void SetString(MDValuePtr Object, std::string Val);
00383 virtual std::string GetString(MDValuePtr Object);
00384 };
00385
00386 class MDTraits_UTF16String : public MDTraits_BasicStringArray
00387 {
00388 public:
00390 virtual std::string Name() const { return "mxflib::MDTraits_UTF16String"; };
00391
00392 protected:
00393 virtual void SetString(MDValuePtr Object, std::string Val);
00394 virtual std::string GetString(MDValuePtr Object);
00395 };
00396
00397 class MDTraits_RawArray : public MDTraits_BasicArray
00398 {
00399 public:
00401 virtual std::string Name() const { return "mxflib::MDTraits_RawArray"; };
00402
00403 protected:
00404 virtual void SetString(MDValuePtr Object, std::string Val);
00405 virtual std::string GetString(MDValuePtr Object);
00406 };
00407
00408 class MDTraits_UUID : public MDTraits_Raw
00409 {
00410 public:
00412
00413 virtual bool HandlesSubdata(void) const { return true; };
00414
00416 virtual std::string Name() const { return "mxflib::MDTraits_UUID"; };
00417
00418 protected:
00419 virtual void SetString(MDValuePtr Object, std::string Val);
00420 virtual std::string GetString(MDValuePtr Object);
00421 };
00422
00423 class MDTraits_Label : public MDTraits_Raw
00424 {
00425 public:
00427
00428 virtual bool HandlesSubdata(void) const { return true; };
00429
00431 virtual std::string Name() const { return "mxflib::MDTraits_Label"; };
00432
00433 protected:
00434 virtual void SetString(MDValuePtr Object, std::string Val);
00435 virtual std::string GetString(MDValuePtr Object);
00436 };
00437
00438 class MDTraits_UMID : public MDTraits_Raw
00439 {
00440 public:
00442
00443 virtual bool HandlesSubdata(void) const { return true; };
00444
00446 virtual std::string Name() const { return "mxflib::MDTraits_UMID"; };
00447
00448 protected:
00449 virtual void SetString(MDValuePtr Object, std::string Val);
00450 virtual std::string GetString(MDValuePtr Object);
00451 };
00452
00453 class MDTraits_RawArrayArray : public MDTraits_BasicArray
00454 {
00455 public:
00457 virtual std::string Name() const { return "mxflib::MDTraits_RawArrayArray"; };
00458
00459 protected:
00460 virtual void SetString(MDValuePtr Object, std::string Val);
00461 virtual std::string GetString(MDValuePtr Object);
00462 };
00463
00464 class MDTraits_BasicCompound : public MDTraits
00465 {
00466 public:
00468 virtual std::string Name() const { return "mxflib::MDTraits_BasicCompound"; };
00469
00470 protected:
00471
00472 virtual void SetString(MDValuePtr Object, std::string Val);
00473 virtual std::string GetString(MDValuePtr Object);
00474
00475 virtual size_t ReadValue(MDValuePtr Object, const UInt8 *Buffer, size_t Size, int Count=0);
00476 };
00477
00478 class MDTraits_BasicEnum : public MDTraits
00479 {
00480 public:
00482 virtual std::string Name() const { return "mxflib::MDTraits_BasicEnum"; };
00483
00484 protected:
00485
00486 virtual void SetString(MDValuePtr Object, std::string Val);
00487 virtual std::string GetString(MDValuePtr Object);
00488 };
00489
00490 class MDTraits_Rational : public MDTraits_BasicCompound
00491 {
00492 public:
00494 virtual std::string Name() const { return "mxflib::MDTraits_Rational"; };
00495
00496 protected:
00497 virtual void SetString(MDValuePtr Object, std::string Val);
00498 virtual std::string GetString(MDValuePtr Object);
00499 };
00500
00501 class MDTraits_TimeStamp : public MDTraits_BasicCompound
00502 {
00503 public:
00505 virtual std::string Name() const { return "mxflib::MDTraits_TimeStamp"; };
00506
00507 protected:
00508 virtual void SetString(MDValuePtr Object, std::string Val);
00509 virtual std::string GetString(MDValuePtr Object);
00510 };
00511 }
00512
00513 #endif // MXFLIB__MDTRAITS_H