llsdtraits.h

Go to the documentation of this file.
00001 
00032 #ifndef LLSDTRAITS_H
00033 #define LLSDTRAITS_H
00034 
00035 #include "llsd.h"
00036 #include "llstring.h"
00037 
00038 template<class T>
00039 class LLSDTraits
00040 {
00041  protected:
00042         typedef T (LLSD::*Getter)() const;
00043         
00044         LLSD::Type type;
00045         Getter getter;
00046         
00047  public:
00048         LLSDTraits();
00049         
00050         T get(const LLSD& actual)
00051                 {
00052                         return (actual.*getter)();
00053                 }
00054         
00055         bool checkType(const LLSD& actual)
00056                 {
00057                         return actual.type() == type;
00058                 }
00059 };
00060 
00061 template<> inline
00062 LLSDTraits<LLSD::Boolean>::LLSDTraits()
00063         : type(LLSD::TypeBoolean), getter(&LLSD::asBoolean)
00064 { }
00065 
00066 template<> inline
00067 LLSDTraits<LLSD::Integer>::LLSDTraits()
00068         : type(LLSD::TypeInteger), getter(&LLSD::asInteger)
00069 { }
00070 
00071 template<> inline
00072 LLSDTraits<LLSD::Real>::LLSDTraits()
00073         : type(LLSD::TypeReal), getter(&LLSD::asReal)
00074 { }
00075 
00076 template<> inline
00077 LLSDTraits<LLSD::UUID>::LLSDTraits()
00078         : type(LLSD::TypeUUID), getter(&LLSD::asUUID)
00079 { }
00080 
00081 template<> inline
00082 LLSDTraits<LLSD::String>::LLSDTraits()
00083         : type(LLSD::TypeString), getter(&LLSD::asString)
00084 { }
00085 
00086 template<>
00087 class LLSDTraits<LLString> : public LLSDTraits<LLSD::String>
00088 { };
00089 
00090 template<>
00091 class LLSDTraits<const char*> : public LLSDTraits<LLSD::String>
00092 { };
00093 
00094 template<> inline
00095 LLSDTraits<LLSD::Date>::LLSDTraits()
00096         : type(LLSD::TypeDate), getter(&LLSD::asDate)
00097 { }
00098 
00099 template<> inline
00100 LLSDTraits<LLSD::URI>::LLSDTraits()
00101         : type(LLSD::TypeURI), getter(&LLSD::asURI)
00102 { }
00103 
00104 template<> inline
00105 LLSDTraits<LLSD::Binary>::LLSDTraits()
00106         : type(LLSD::TypeBinary), getter(&LLSD::asBinary)
00107 { }
00108 
00109 #endif // LLSDTRAITS_H

Generated on Thu Jul 1 06:09:09 2010 for Second Life Viewer by  doxygen 1.4.7