#ifndef BU_JSON_H #define BU_JSON_H #include "bu/hash.h" #include "bu/list.h" #include "bu/string.h" namespace Bu { class Stream; class Json { public: enum Type { Invalid, Object, Array, String, Number, Boolean, Null }; public: Json(); Json( const Bu::String &sJson ); Json( Bu::Stream &sInput ); virtual ~Json(); void parse( Bu::Stream &sInput ); void reset(); private: void parseString( char &c, Bu::Stream &sInput, Bu::String &sOut ); void parseString( char &c, Bu::Stream &sInput ); void parseObject( char &c, Bu::Stream &sInput ); void parseArray( char &c, Bu::Stream &sInput ); void parseNumber( char &c, Bu::Stream &sInput ); void parseLiteral( char &c, Bu::Stream &sInput ); bool readChar( char &c, Bu::Stream &sInput ); void readChar( char &c, Bu::Stream &sInput, const char *sSection ); bool isWs( char c ); private: typedef Bu::Hash JsonHash; typedef Bu::List JsonList; Type eType; union DatUnion { DatUnion() : pObject( NULL ) { } JsonHash *pObject; JsonList *pArray; Bu::String *pString; double dNumber; bool bBoolean; } uDat; }; }; #endif