summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Buland <mbuland@penny-arcade.com>2018-01-18 16:08:24 -0800
committerMike Buland <mbuland@penny-arcade.com>2018-01-18 16:08:24 -0800
commit516fa9045af1e9c85ce524535d0ea5bc395e86cb (patch)
tree482ceb92494c3770d12b91a511f105c304025fa9
parentea96e4decaa23fc8ddfb528d4851751ec9496490 (diff)
downloadlibbu++-516fa9045af1e9c85ce524535d0ea5bc395e86cb.tar.gz
libbu++-516fa9045af1e9c85ce524535d0ea5bc395e86cb.tar.bz2
libbu++-516fa9045af1e9c85ce524535d0ea5bc395e86cb.tar.xz
libbu++-516fa9045af1e9c85ce524535d0ea5bc395e86cb.zip
Made json much more helpful. Fixed array iterators.
-rw-r--r--src/stable/array.h21
-rw-r--r--src/unstable/json.cpp81
-rw-r--r--src/unstable/json.h18
3 files changed, 115 insertions, 5 deletions
diff --git a/src/stable/array.h b/src/stable/array.h
index a662705..8c17cc4 100644
--- a/src/stable/array.h
+++ b/src/stable/array.h
@@ -362,6 +362,18 @@ namespace Bu
362 long iPos; 362 long iPos;
363 363
364 public: 364 public:
365 iterator() :
366 src( NULL ),
367 iPos( -1 )
368 {
369 }
370
371 iterator( const iterator &rSrc ) :
372 src( rSrc.src ),
373 iPos( rSrc.iPos )
374 {
375 }
376
365 iterator operator++( int ) 377 iterator operator++( int )
366 { 378 {
367 if( iPos < 0 ) 379 if( iPos < 0 )
@@ -480,11 +492,18 @@ namespace Bu
480 long iPos; 492 long iPos;
481 493
482 public: 494 public:
483 const_iterator( iterator &rSrc ) : 495 const_iterator( const iterator &rSrc ) :
484 src( rSrc.src ), 496 src( rSrc.src ),
485 iPos( rSrc.iPos ) 497 iPos( rSrc.iPos )
486 { 498 {
487 } 499 }
500
501 const_iterator( const const_iterator &rSrc ) :
502 src( rSrc.src ),
503 iPos( rSrc.iPos )
504 {
505 }
506
488 const_iterator operator++( int ) 507 const_iterator operator++( int )
489 { 508 {
490 if( iPos < 0 ) 509 if( iPos < 0 )
diff --git a/src/unstable/json.cpp b/src/unstable/json.cpp
index 6159ef3..3627214 100644
--- a/src/unstable/json.cpp
+++ b/src/unstable/json.cpp
@@ -126,15 +126,24 @@ bool Bu::Json::isNull() const
126 return eType == Null; 126 return eType == Null;
127} 127}
128 128
129Bu::Json *Bu::Json::operator[]( const Bu::String &sKey ) const 129Bu::Json &Bu::Json::operator[]( const Bu::String &sKey ) const
130{ 130{
131 if( eType != Object ) 131 if( eType != Object )
132 throw Bu::ExceptionBase( 132 throw Bu::ExceptionBase(
133 "Object entry requested from non-object json object." 133 "Object entry requested from non-object json object."
134 ); 134 );
135 135
136 return uDat.pObject->get( sKey ); 136 return *uDat.pObject->get( sKey );
137}
138
139Bu::Json &Bu::Json::operator[]( int iIndex ) const
140{
141 if( eType != Array )
142 throw Bu::ExceptionBase(
143 "Object entry requested from non-array json object."
144 );
137 145
146 return *uDat.pArray->get( iIndex );
138} 147}
139 148
140int Bu::Json::getSize() const 149int Bu::Json::getSize() const
@@ -181,11 +190,79 @@ void Bu::Json::insert( const Bu::String &sKey, Bu::Json *pObj )
181 uDat.pObject->insert( sKey, pObj ); 190 uDat.pObject->insert( sKey, pObj );
182} 191}
183 192
193void Bu::Json::insert( const Bu::String &sKey, const Bu::String &sValue )
194{
195 uDat.pObject->insert( sKey, new Json( sValue ) );
196}
197
198void Bu::Json::insert( const Bu::String &sKey, const char *sValue )
199{
200 uDat.pObject->insert( sKey, new Json( sValue ) );
201}
202
203void Bu::Json::insert( const Bu::String &sKey, double dValue )
204{
205 uDat.pObject->insert( sKey, new Json( dValue ) );
206}
207
208void Bu::Json::insert( const Bu::String &sKey, bool bValue )
209{
210 uDat.pObject->insert( sKey, new Json( bValue ) );
211}
212
213Bu::Json &Bu::Json::insertObject( const Bu::String &sKey )
214{
215 Json *pOb = new Json( Object );
216 uDat.pObject->insert( sKey, pOb );
217 return *pOb;
218}
219
220Bu::Json &Bu::Json::insertArray( const Bu::String &sKey )
221{
222 Json *pAr = new Json( Array );
223 uDat.pObject->insert( sKey, pAr );
224 return *pAr;
225}
226
184void Bu::Json::append( Bu::Json *pObj ) 227void Bu::Json::append( Bu::Json *pObj )
185{ 228{
186 uDat.pArray->append( pObj ); 229 uDat.pArray->append( pObj );
187} 230}
188 231
232void Bu::Json::append( const Bu::String &sValue )
233{
234 uDat.pArray->append( new Json( sValue ) );
235}
236
237void Bu::Json::append( const char *sValue )
238{
239 uDat.pArray->append( new Json( sValue ) );
240}
241
242void Bu::Json::append( double dValue )
243{
244 uDat.pArray->append( new Json( dValue ) );
245}
246
247void Bu::Json::append( bool bValue )
248{
249 uDat.pArray->append( new Json( bValue ) );
250}
251
252Bu::Json &Bu::Json::appendObject()
253{
254 Json *pOb = new Json( Object );
255 uDat.pArray->append( pOb );
256 return *pOb;
257}
258
259Bu::Json &Bu::Json::appendArray()
260{
261 Json *pAr = new Json( Array );
262 uDat.pArray->append( pAr );
263 return *pAr;
264}
265
189void Bu::Json::parse( Bu::Stream &sInput ) 266void Bu::Json::parse( Bu::Stream &sInput )
190{ 267{
191 reset(); 268 reset();
diff --git a/src/unstable/json.h b/src/unstable/json.h
index 86074bc..217a69a 100644
--- a/src/unstable/json.h
+++ b/src/unstable/json.h
@@ -3,6 +3,7 @@
3 3
4#include "bu/hash.h" 4#include "bu/hash.h"
5#include "bu/list.h" 5#include "bu/list.h"
6#include "bu/array.h"
6#include "bu/string.h" 7#include "bu/string.h"
7#include "bu/utfstring.h" 8#include "bu/utfstring.h"
8 9
@@ -15,7 +16,7 @@ namespace Bu
15 private: 16 private:
16 Json( char &c, Bu::Stream &sInput ); 17 Json( char &c, Bu::Stream &sInput );
17 typedef Bu::Hash<Bu::String, Json *> JsonHash; 18 typedef Bu::Hash<Bu::String, Json *> JsonHash;
18 typedef Bu::List<Json *> JsonList; 19 typedef Bu::Array<Json *> JsonList;
19 20
20 public: 21 public:
21 typedef JsonList::iterator iterator; 22 typedef JsonList::iterator iterator;
@@ -47,7 +48,8 @@ namespace Bu
47 double getNumber() const; 48 double getNumber() const;
48 bool getBoolean() const; 49 bool getBoolean() const;
49 bool isNull() const; 50 bool isNull() const;
50 Json *operator[]( const Bu::String &sKey ) const; 51 Json &operator[]( const Bu::String &sKey ) const;
52 Json &operator[]( int iIndex ) const;
51 int getSize() const; 53 int getSize() const;
52 iterator begin(); 54 iterator begin();
53 const_iterator begin() const; 55 const_iterator begin() const;
@@ -56,7 +58,19 @@ namespace Bu
56 58
57 bool has( const Bu::String &sKey ) const; 59 bool has( const Bu::String &sKey ) const;
58 void insert( const Bu::String &sKey, Bu::Json *pObj ); 60 void insert( const Bu::String &sKey, Bu::Json *pObj );
61 void insert( const Bu::String &sKey, const Bu::String &sValue );
62 void insert( const Bu::String &sKey, const char *sValue );
63 void insert( const Bu::String &sKey, double dValue );
64 void insert( const Bu::String &sKey, bool bValue );
65 Json &insertObject( const Bu::String &sKey );
66 Json &insertArray( const Bu::String &sKey );
59 void append( Bu::Json *pObj ); 67 void append( Bu::Json *pObj );
68 void append( const Bu::String &sValue );
69 void append( const char *sValue );
70 void append( double dValue );
71 void append( bool bValue );
72 Json &appendObject();
73 Json &appendArray();
60 74
61 void parse( Bu::Stream &sInput ); 75 void parse( Bu::Stream &sInput );
62 void parse( const Bu::String &sInput ); 76 void parse( const Bu::String &sInput );