#include #include #include #include #include #include #include using namespace Core; // Define IDs for default types namespace Core { // Generalized template class CoreTypeSerializer : public TypeSerializer { public: // Buffer virtual bool supportsBuffer() const { return true; } virtual void toBuffer(const Any& value, Buffer& buffer) const { ((&buffer)->*TToBuffer)(value.get()); } virtual void fromBuffer(Any& value, Buffer& buffer) const { value.set(((&buffer)->*TFromBuffer)()); } // String virtual bool supportsString() const { return true; } virtual std::string toString(const Any& value) const { return (*TToString)(value.get()); } virtual void fromString(Any& value, const std::string& str) const { value.set((*TFromString)(str)); } }; class CORE_API BufferSerializer : public DefaultTypeSerializer { public: virtual bool supportsBuffer() const { return true; } virtual void toBuffer(const Any& source, Buffer& target) const { target.writeBuffer(source.get()); } virtual void fromBuffer(Any& target, Buffer& source) const { target.set(source.readBuffer()); } }; void initialize() { // Register default types Types::registerType(TYPE_INT32, "int32", new CoreTypeSerializer()); Types::registerType(TYPE_UINT32, "uint32", new CoreTypeSerializer()); Types::registerType(TYPE_INT16, "int16", new CoreTypeSerializer()); Types::registerType(TYPE_UINT16, "uint16", new CoreTypeSerializer()); Types::registerType(TYPE_INT8, "int8", new CoreTypeSerializer()); Types::registerType(TYPE_UINT8, "uint8", new CoreTypeSerializer()); Types::registerType(TYPE_BOOLEAN, "boolean", new CoreTypeSerializer()); Types::registerType(TYPE_FLOAT, "float", new CoreTypeSerializer()); Types::registerType(TYPE_DOUBLE, "double", new CoreTypeSerializer()); Types::registerType(TYPE_STRING, "string", new CoreTypeSerializer()); Types::registerType(TYPE_BUFFER, "buffer", new BufferSerializer()); } }