/c++-libbu++/src/object.h
C Header | 122 lines | 95 code | 18 blank | 9 comment | 3 complexity | b89d516149dcbfddbe30ac41316ec6ea MD5 | raw file
Possible License(s): BSD-3-Clause
- /*
- * Copyright (C) 2007-2013 Xagasoft, All rights reserved.
- *
- * This file is part of the libgats library and is released under the
- * terms of the license contained in the file LICENSE.
- */
- #ifndef GATS_OBJECT_H
- #define GATS_OBJECT_H
- #include <bu/string.h>
- 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:
- class StrPos
- {
- public:
- StrPos( const Bu::String::const_iterator &i ) :
- i( i ), iLine( 1 ), iChar( 1 )
- { }
- Bu::String::const_iterator i;
- int iLine;
- int iChar;
- char operator*()
- {
- return *i;
- }
- StrPos &operator++(int)
- {
- i++;
- if( i )
- {
- if( *i == '\n' )
- {
- iLine++;
- iChar = 0;
- }
- else
- iChar++;
- }
- return *this;
- }
- operator bool()
- {
- return i;
- }
- };
- class Thrower : public Bu::String::FormatProxyEndAction
- {
- public:
- Thrower( Gats::Object::StrPos &i ) :
- i( i )
- {
- }
- virtual ~Thrower()
- {
- }
- virtual void operator()( const Bu::String &sFinal )
- {
- throw Bu::ExceptionBase(
- (Bu::String("%1: %2: ").arg(i.iLine).arg(i.iChar).end() + sFinal)
- .getStr()
- );
- }
- private:
- Gats::Object::StrPos &i;
- };
- static Bu::String::FormatProxy posError( Gats::Object::StrPos &i, const Bu::String &msg );
- static Object *strToGats( Gats::Object::StrPos &i );
- static Bu::String token( Gats::Object::StrPos &i );
- static void skipWs( Gats::Object::StrPos &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