#ifndef LLSDTRAITS_H #define LLSDTRAITS_H #include "llsd.h" #include "llstring.h" template class LLSDTraits { protected: typedef T (LLSD::*Getter)() const; LLSD::Type type; Getter getter; public: LLSDTraits(); T get(const LLSD& actual) { return (actual.*getter)(); } bool checkType(const LLSD& actual) { return actual.type() == type; } }; template<> inline LLSDTraits::LLSDTraits() : type(LLSD::TypeBoolean), getter(&LLSD::asBoolean) { } template<> inline LLSDTraits::LLSDTraits() : type(LLSD::TypeInteger), getter(&LLSD::asInteger) { } template<> inline LLSDTraits::LLSDTraits() : type(LLSD::TypeReal), getter(&LLSD::asReal) { } template<> inline LLSDTraits::LLSDTraits() : type(LLSD::TypeUUID), getter(&LLSD::asUUID) { } template<> inline LLSDTraits::LLSDTraits() : type(LLSD::TypeString), getter(&LLSD::asString) { } template<> class LLSDTraits : public LLSDTraits { }; template<> class LLSDTraits : public LLSDTraits { }; template<> inline LLSDTraits::LLSDTraits() : type(LLSD::TypeDate), getter(&LLSD::asDate) { } template<> inline LLSDTraits::LLSDTraits() : type(LLSD::TypeURI), getter(&LLSD::asURI) { } template<> inline LLSDTraits::LLSDTraits() : type(LLSD::TypeBinary), getter(&LLSD::asBinary) { } #endif // LLSDTRAITS_H