#ifndef GATS_OBJECT_H #define GATS_OBJECT_H #include namespace Bu { class Stream; class Formatter; }; namespace Gats { enum Type { typeDictionary, typeList, typeString, typeInteger, typeFloat, typeBoolean, typeNull }; /** * The baseclass for every type that can be stored in a packet. */ class Object { public: Object(); virtual ~Object(); virtual Type getType() const =0; virtual void write( Bu::Stream &rOut ) const=0; virtual void read( Bu::Stream &rIn, char cType )=0; virtual Object *clone() const=0; static Object *read( Bu::Stream &rIn ); static Object *strToGats( const Bu::String &sStr ); private: static Object *strToGats( Bu::String::const_iterator &i ); static Bu::String token( Bu::String::const_iterator &i ); static void skipWs( Bu::String::const_iterator &i ); }; const char *typeToStr( Type t ); }; Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Object &obj ); Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Type &t ); #endif