X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2FMoof%2FSerializable.hh;fp=src%2FMoof%2FSerializable.hh;h=0000000000000000000000000000000000000000;hb=23d8f7a5fbd1eca7f46f2342c20ac5e28ae0128a;hp=e91660d53d3752937d7e2f342607acced3d57719;hpb=fa9438c66ae0154e6d9ad196e0fb39649d359da4;p=chaz%2Fyoink diff --git a/src/Moof/Serializable.hh b/src/Moof/Serializable.hh deleted file mode 100644 index e91660d..0000000 --- a/src/Moof/Serializable.hh +++ /dev/null @@ -1,257 +0,0 @@ - -/******************************************************************************* - - Copyright (c) 2009, Charles McGarvey - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*******************************************************************************/ - -#ifndef _MOOF_SERIALIZABLE_HH_ -#define _MOOF_SERIALIZABLE_HH_ - -#include -#include -#include -#include - -#include -#include -#include - - -namespace Mf { - - -/** - * Interface for a type which can be serialized and deserialized. - */ - -struct Serializable -{ - // basic types which are serializable - typedef long Integer; - typedef double Float; - typedef bool Boolean; - typedef std::string String; - typedef std::wstring WideString; - typedef std::vector Array; - typedef std::map Map; - - - virtual ~Serializable(); - - virtual void serialize(Serializer& out) const = 0; - virtual void deserialize(Deserializer& in) = 0; - - virtual void print() const = 0; - - virtual bool get(Integer& value); - virtual bool get(Float& value); - virtual bool get(Boolean& value); - virtual bool get(String& value); - virtual bool get(WideString& value); - virtual bool get(Array& value); - virtual bool get(Map& value); - - /* - * To get a number value which may have been parsed as either an integer or - * double, use these getters instead. - */ - - bool getNumber(Integer& value); - bool getNumber(Float& value); - - virtual bool isNull(); -}; - - -template -class SerializableBasic : public Serializable -{ - T value_; - -public: - - SerializableBasic() {} - SerializableBasic(const T& value) : - value_(value) {} - - void serialize(Serializer& out) const; - void deserialize(Deserializer& in); - - void print() const; - bool get(T& value); -}; - - -struct SerializableNull : public Serializable -{ - SerializableNull() {} - - void serialize(Serializer& out) const; - void deserialize(Deserializer& in); - - void print() const; - bool isNull(); -}; - - -template -inline void SerializableBasic::serialize(Serializer& out) const -{ - out.push(value_); -} - -template <> -inline void -SerializableBasic::serialize(Serializer& out) const -{ - out.pushArrayHead(); - - std::vector::const_iterator it; - for (it = value_.begin(); it < value_.end(); ++it) - { - (*it)->serialize(out); - } - - out.pushArrayTail(); -} - -template <> -inline void -SerializableBasic::serialize(Serializer& out) const -{ - out.pushMapHead(); - - for (Map::const_iterator it = value_.begin(); it != value_.end(); ++it) - { - out.push((*it).first); - (*it).second->serialize(out); - } - - out.pushMapTail(); -} - -inline void SerializableNull::serialize(Serializer& out) const -{ - out.pushNull(); -} - - -template -inline void SerializableBasic::deserialize(Deserializer& in) -{ - in.pop(); -} - -template <> -inline void -SerializableBasic::deserialize(Deserializer& in) -{ - SerializableP obj; - - in.pop(); - - while (obj = in.deserialize()) - { - value_.push_back(obj); - } - - in.pop(); -} - -template <> -inline void -SerializableBasic::deserialize(Deserializer& in) -{ - SerializableP obj; - - in.pop(); - - while (obj = in.deserialize()) - { - std::string key; - if (obj->get(key)) - { - value_[key] = in.deserialize(); - } - } - - in.pop(); -} - -inline void SerializableNull::deserialize(Deserializer& in) -{ - in.pop(); -} - - -template -inline void SerializableBasic::print() const -{ - std::cout << std::boolalpha << typeid(T).name() << "(" << value_ << ")"; -} - -template <> -inline void SerializableBasic::print() const -{ - std::wcout << value_; -} - -template <> -inline void SerializableBasic::print() const -{ - std::cout << "array"; -} - -template <> -inline void SerializableBasic::print() const -{ - std::cout << "map"; -} - -inline void SerializableNull::print() const -{ - std::cout << "null"; -} - - -template -inline bool SerializableBasic::get(T& value) -{ - value = value_; - return true; -} - -inline bool SerializableNull::isNull() -{ - return true; -} - - -} // namespace Mf - -#endif // _MOOF_SERIALIZABLE_HH_ - -/** vim: set ts=4 sw=4 tw=80: *************************************************/ -