diff options
Diffstat (limited to 'src/unstable')
-rw-r--r-- | src/unstable/json.cpp | 53 | ||||
-rw-r--r-- | src/unstable/json.h | 10 |
2 files changed, 57 insertions, 6 deletions
diff --git a/src/unstable/json.cpp b/src/unstable/json.cpp index 0b47da4..f5a1696 100644 --- a/src/unstable/json.cpp +++ b/src/unstable/json.cpp | |||
@@ -9,15 +9,52 @@ | |||
9 | #define next( txt ) readChar( c, sInput, "Unexpected end of stream while reading " txt "." ) | 9 | #define next( txt ) readChar( c, sInput, "Unexpected end of stream while reading " txt "." ) |
10 | 10 | ||
11 | Bu::Json::Json() : | 11 | Bu::Json::Json() : |
12 | eType( Invalid ) | 12 | eType( Null ) |
13 | { | 13 | { |
14 | } | 14 | } |
15 | 15 | ||
16 | Bu::Json::Json( const Bu::String &sJson ) : | 16 | Bu::Json::Json( const Bu::String &sValue ) : |
17 | eType( Invalid ) | 17 | eType( String ), |
18 | uDat( sValue ) | ||
19 | { | ||
20 | } | ||
21 | |||
22 | Bu::Json::Json( double dValue ) : | ||
23 | eType( Number ), | ||
24 | uDat( dValue ) | ||
25 | { | ||
26 | } | ||
27 | |||
28 | Bu::Json::Json( bool bValue ) : | ||
29 | eType( Boolean ), | ||
30 | uDat( bValue ) | ||
18 | { | 31 | { |
19 | Bu::StaticMemBuf mIn( sJson.getStr(), sJson.getSize() ); | 32 | } |
20 | parse( mIn ); | 33 | |
34 | Bu::Json::Json( Type eType ) : | ||
35 | eType( eType ) | ||
36 | { | ||
37 | switch( eType ) | ||
38 | { | ||
39 | case Object: | ||
40 | uDat.pObject = new JsonHash(); | ||
41 | break; | ||
42 | |||
43 | case Array: | ||
44 | uDat.pArray = new JsonList(); | ||
45 | break; | ||
46 | |||
47 | case String: | ||
48 | uDat.pString = new Bu::String(); | ||
49 | break; | ||
50 | |||
51 | case Number: | ||
52 | case Boolean: | ||
53 | case Null: | ||
54 | case Invalid: | ||
55 | uDat.pObject = NULL; | ||
56 | break; | ||
57 | } | ||
21 | } | 58 | } |
22 | 59 | ||
23 | Bu::Json::Json( Bu::Stream &sInput ) : | 60 | Bu::Json::Json( Bu::Stream &sInput ) : |
@@ -132,6 +169,12 @@ void Bu::Json::parse( Bu::Stream &sInput ) | |||
132 | parse( c, sInput ); | 169 | parse( c, sInput ); |
133 | } | 170 | } |
134 | 171 | ||
172 | void Bu::Json::parse( const Bu::String &sInput ) | ||
173 | { | ||
174 | Bu::StaticMemBuf mb( sInput.getStr(), sInput.getSize() ); | ||
175 | parse( mb ); | ||
176 | } | ||
177 | |||
135 | void Bu::Json::parse( char &c, Bu::Stream &sInput ) | 178 | void Bu::Json::parse( char &c, Bu::Stream &sInput ) |
136 | { | 179 | { |
137 | while( c == ' ' || c == '\t' || c == '\r' || c == '\n' ) | 180 | while( c == ' ' || c == '\t' || c == '\r' || c == '\n' ) |
diff --git a/src/unstable/json.h b/src/unstable/json.h index 2d1770d..76d96be 100644 --- a/src/unstable/json.h +++ b/src/unstable/json.h | |||
@@ -32,7 +32,10 @@ namespace Bu | |||
32 | 32 | ||
33 | public: | 33 | public: |
34 | Json(); | 34 | Json(); |
35 | Json( const Bu::String &sJson ); | 35 | Json( const Bu::String &sValue ); |
36 | Json( double dValue ); | ||
37 | Json( bool bValue ); | ||
38 | Json( Type eType ); | ||
36 | Json( Bu::Stream &sInput ); | 39 | Json( Bu::Stream &sInput ); |
37 | virtual ~Json(); | 40 | virtual ~Json(); |
38 | 41 | ||
@@ -49,6 +52,7 @@ namespace Bu | |||
49 | const_iterator end() const; | 52 | const_iterator end() const; |
50 | 53 | ||
51 | void parse( Bu::Stream &sInput ); | 54 | void parse( Bu::Stream &sInput ); |
55 | void parse( const Bu::String &sInput ); | ||
52 | void reset(); | 56 | void reset(); |
53 | 57 | ||
54 | void write( Bu::Stream &sOutput ) const; | 58 | void write( Bu::Stream &sOutput ) const; |
@@ -75,6 +79,10 @@ namespace Bu | |||
75 | union DatUnion | 79 | union DatUnion |
76 | { | 80 | { |
77 | DatUnion() : pObject( NULL ) { } | 81 | DatUnion() : pObject( NULL ) { } |
82 | DatUnion( const Bu::String &sValue ) : | ||
83 | pString( new Bu::String( sValue ) ) { } | ||
84 | DatUnion( double dValue ) : dNumber( dValue ) { } | ||
85 | DatUnion( bool bValue ) : bBoolean( bValue ) { } | ||
78 | JsonHash *pObject; | 86 | JsonHash *pObject; |
79 | JsonList *pArray; | 87 | JsonList *pArray; |
80 | Bu::String *pString; | 88 | Bu::String *pString; |