X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FSerializable.hh;h=e91660d53d3752937d7e2f342607acced3d57719;hp=458dbe8dcdf745f8d44ebc26ce498aaa179a137c;hb=f72400af4fa3e7b54dab154b5a2b6503a6f9af18;hpb=c2321281bf12a7efaedde930422c7ddbc92080d4 diff --git a/src/Moof/Serializable.hh b/src/Moof/Serializable.hh index 458dbe8..e91660d 100644 --- a/src/Moof/Serializable.hh +++ b/src/Moof/Serializable.hh @@ -46,9 +46,18 @@ namespace Mf { * Interface for a type which can be serialized and deserialized. */ -class Serializable +struct Serializable { -public: + // 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; @@ -56,32 +65,35 @@ public: virtual void print() const = 0; - virtual bool get(long& value); - virtual bool get(double& value); - virtual bool get(bool& value); - virtual bool get(std::string& value); - virtual bool get(std::wstring& value); - virtual bool get(std::vector& value); - virtual bool get(std::map& value); + 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(long&); - bool getNumber(double&); + bool getNumber(Integer& value); + bool getNumber(Float& value); virtual bool isNull(); }; template -class SerializableBase : public Serializable +class SerializableBasic : public Serializable { + T value_; + public: - SerializableBase() {} - SerializableBase(const T& value) : + + SerializableBasic() {} + SerializableBasic(const T& value) : value_(value) {} void serialize(Serializer& out) const; @@ -89,15 +101,13 @@ public: void print() const; bool get(T& value); -public: - T value_; }; -class SerializableNull : public Serializable +struct SerializableNull : public Serializable { -public: SerializableNull() {} + void serialize(Serializer& out) const; void deserialize(Deserializer& in); @@ -106,33 +116,22 @@ public: }; -typedef SerializableBase SerializableInteger; -typedef SerializableBase SerializableReal; -typedef SerializableBase SerializableBoolean; -typedef SerializableBase SerializableString; -typedef SerializableBase SerializableWideString; -typedef SerializableBase > SerializableArray; -typedef SerializableBase > - SerializableMap; - - - template -inline void SerializableBase::serialize(Serializer& out) const +inline void SerializableBasic::serialize(Serializer& out) const { out.push(value_); } template <> inline void -SerializableBase >::serialize(Serializer& out) const +SerializableBasic::serialize(Serializer& out) const { out.pushArrayHead(); - std::vector::const_iterator i; - for (i = value_.begin(); i < value_.end(); i++) + std::vector::const_iterator it; + for (it = value_.begin(); it < value_.end(); ++it) { - (*i)->serialize(out); + (*it)->serialize(out); } out.pushArrayTail(); @@ -140,15 +139,14 @@ SerializableBase >::serialize(Serializer& out) cons template <> inline void -SerializableBase >::serialize(Serializer& out) const +SerializableBasic::serialize(Serializer& out) const { out.pushMapHead(); - std::map::const_iterator i; - for (i = value_.begin(); i != value_.end(); i++) + for (Map::const_iterator it = value_.begin(); it != value_.end(); ++it) { - out.push((*i).first); - (*i).second->serialize(out); + out.push((*it).first); + (*it).second->serialize(out); } out.pushMapTail(); @@ -161,21 +159,22 @@ inline void SerializableNull::serialize(Serializer& out) const template -inline void SerializableBase::deserialize(Deserializer& in) +inline void SerializableBasic::deserialize(Deserializer& in) { in.pop(); } template <> -inline void SerializableBase >::deserialize(Deserializer& in) +inline void +SerializableBasic::deserialize(Deserializer& in) { - SerializablePtr obj; + SerializableP obj; in.pop(); while (obj = in.deserialize()) { - value_.push_back(SerializablePtr(obj)); + value_.push_back(obj); } in.pop(); @@ -183,9 +182,9 @@ inline void SerializableBase >::deserialize(Deseria template <> inline void -SerializableBase >::deserialize(Deserializer& in) +SerializableBasic::deserialize(Deserializer& in) { - SerializablePtr obj; + SerializableP obj; in.pop(); @@ -208,25 +207,25 @@ inline void SerializableNull::deserialize(Deserializer& in) template -inline void SerializableBase::print() const +inline void SerializableBasic::print() const { std::cout << std::boolalpha << typeid(T).name() << "(" << value_ << ")"; } template <> -inline void SerializableBase::print() const +inline void SerializableBasic::print() const { std::wcout << value_; } template <> -inline void SerializableBase >::print() const +inline void SerializableBasic::print() const { std::cout << "array"; } template <> -inline void SerializableBase >::print() const +inline void SerializableBasic::print() const { std::cout << "map"; } @@ -238,7 +237,7 @@ inline void SerializableNull::print() const template -inline bool SerializableBase::get(T& value) +inline bool SerializableBasic::get(T& value) { value = value_; return true;