mdtraits.h

Go to the documentation of this file.
00001 
00007 /*
00008  *  Copyright (c) 2003, Matt Beard
00009  *
00010  *  This software is provided 'as-is', without any express or implied warranty.
00011  *  In no event will the authors be held liable for any damages arising from
00012  *  the use of this software.
00013  *
00014  *  Permission is granted to anyone to use this software for any purpose,
00015  *  including commercial applications, and to alter it and redistribute it
00016  *  freely, subject to the following restrictions:
00017  *
00018  *    1. The origin of this software must not be misrepresented; you must
00019  *       not claim that you wrote the original software. If you use this
00020  *       software in a product, an acknowledgment in the product
00021  *       documentation would be appreciated but is not required.
00022  *  
00023  *    2. Altered source versions must be plainly marked as such, and must
00024  *       not be misrepresented as being the original software.
00025  *  
00026  *    3. This notice may not be removed or altered from any source
00027  *       distribution.
00028  */
00029 #ifndef MXFLIB__MDTRAITS_H
00030 #define MXFLIB__MDTRAITS_H
00031 
00032 namespace mxflib
00033 {
00034     // Forward declare so the class can include pointers to itself (if required)
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     /* Static Methods */
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     /* Default implementations */
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         // Give the MDValue class access to our internals to call Set/Get functions
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     // Extended implementations
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         //DRAGONS: Should probably have set integer functions as well
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         // DRAGONS: What about all the other set and get functions?
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         // DRAGONS: What about all the other set and get functions?
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

Generated on Mon Apr 2 15:20:53 2007 for MXFLib by  doxygen 1.5.1-p1