diff options
| author | Mike Buland <mbuland@penny-arcade.com> | 2019-03-11 11:25:32 -0700 |
|---|---|---|
| committer | Mike Buland <mbuland@penny-arcade.com> | 2019-03-11 11:25:32 -0700 |
| commit | 33d08f7b68ee57824c135c927bf86ca5fa3444cb (patch) | |
| tree | 00e6b2a0f9113e1682d4b2ba5533f530f6797b3d /src | |
| parent | 252225fa9b2dd3dbc0a3c87bc65ce1f821706e7e (diff) | |
| download | libbu++-33d08f7b68ee57824c135c927bf86ca5fa3444cb.tar.gz libbu++-33d08f7b68ee57824c135c927bf86ca5fa3444cb.tar.bz2 libbu++-33d08f7b68ee57824c135c927bf86ca5fa3444cb.tar.xz libbu++-33d08f7b68ee57824c135c927bf86ca5fa3444cb.zip | |
Json parsing fix + new API for copying.
Diffstat (limited to '')
| -rw-r--r-- | src/unstable/json.cpp | 57 | ||||
| -rw-r--r-- | src/unstable/json.h | 4 |
2 files changed, 61 insertions, 0 deletions
diff --git a/src/unstable/json.cpp b/src/unstable/json.cpp index 06df9b1..d7e84d9 100644 --- a/src/unstable/json.cpp +++ b/src/unstable/json.cpp | |||
| @@ -81,6 +81,12 @@ Bu::Json::Json( char &c, Bu::Stream &sInput ) : | |||
| 81 | parse( c, sInput ); | 81 | parse( c, sInput ); |
| 82 | } | 82 | } |
| 83 | 83 | ||
| 84 | Bu::Json::Json( const Json &rSrc ) : | ||
| 85 | eType( Invalid ) | ||
| 86 | { | ||
| 87 | (*this) = rSrc; | ||
| 88 | } | ||
| 89 | |||
| 84 | Bu::Json::~Json() | 90 | Bu::Json::~Json() |
| 85 | { | 91 | { |
| 86 | reset(); | 92 | reset(); |
| @@ -194,6 +200,10 @@ void Bu::Json::insert( const Bu::String &sKey, Bu::Json *pObj ) | |||
| 194 | { | 200 | { |
| 195 | uDat.pObject->insert( sKey, pObj ); | 201 | uDat.pObject->insert( sKey, pObj ); |
| 196 | } | 202 | } |
| 203 | void Bu::Json::insert( const Bu::String &sKey, const Bu::Json &rObj ) | ||
| 204 | { | ||
| 205 | uDat.pObject->insert( sKey, new Bu::Json( rObj ) ); | ||
| 206 | } | ||
| 197 | 207 | ||
| 198 | void Bu::Json::insert( const Bu::String &sKey, const Bu::String &sValue ) | 208 | void Bu::Json::insert( const Bu::String &sKey, const Bu::String &sValue ) |
| 199 | { | 209 | { |
| @@ -352,6 +362,7 @@ void Bu::Json::reset() | |||
| 352 | break; | 362 | break; |
| 353 | } | 363 | } |
| 354 | uDat.pObject = NULL; | 364 | uDat.pObject = NULL; |
| 365 | eType = Invalid; | ||
| 355 | } | 366 | } |
| 356 | 367 | ||
| 357 | void Bu::Json::write( Bu::Stream &sOutput ) const | 368 | void Bu::Json::write( Bu::Stream &sOutput ) const |
| @@ -457,6 +468,51 @@ Bu::String Bu::Json::toStringStable() const | |||
| 457 | return mb.getString(); | 468 | return mb.getString(); |
| 458 | } | 469 | } |
| 459 | 470 | ||
| 471 | Bu::Json &Bu::Json::operator=( const Bu::Json &rSrc ) | ||
| 472 | { | ||
| 473 | reset(); | ||
| 474 | |||
| 475 | eType = rSrc.eType; | ||
| 476 | switch( eType ) | ||
| 477 | { | ||
| 478 | case Invalid: | ||
| 479 | case Null: | ||
| 480 | break; | ||
| 481 | |||
| 482 | case String: | ||
| 483 | uDat.pString = new Bu::String( *rSrc.uDat.pString ); | ||
| 484 | break; | ||
| 485 | |||
| 486 | case Number: | ||
| 487 | uDat.dNumber = rSrc.uDat.dNumber; | ||
| 488 | break; | ||
| 489 | |||
| 490 | case Boolean: | ||
| 491 | uDat.bBoolean = rSrc.uDat.bBoolean; | ||
| 492 | break; | ||
| 493 | |||
| 494 | case Object: | ||
| 495 | uDat.pObject = new JsonHash(); | ||
| 496 | for( JsonHash::const_iterator i = rSrc.uDat.pObject->begin(); | ||
| 497 | i; ++i ) | ||
| 498 | { | ||
| 499 | uDat.pObject->insert( i.getKey(), new Json( *i.getValue() ) ); | ||
| 500 | } | ||
| 501 | break; | ||
| 502 | |||
| 503 | case Array: | ||
| 504 | uDat.pArray = new JsonList(); | ||
| 505 | for( JsonList::const_iterator i = rSrc.uDat.pArray->begin(); | ||
| 506 | i; ++i ) | ||
| 507 | { | ||
| 508 | uDat.pArray->append( new Json( *(*i) ) ); | ||
| 509 | } | ||
| 510 | break; | ||
| 511 | } | ||
| 512 | |||
| 513 | return *this; | ||
| 514 | } | ||
| 515 | |||
| 460 | void Bu::Json::parseString( char &c, Bu::Stream &sInput, Bu::String &sOut ) | 516 | void Bu::Json::parseString( char &c, Bu::Stream &sInput, Bu::String &sOut ) |
| 461 | { | 517 | { |
| 462 | skipWs( c, sInput ); | 518 | skipWs( c, sInput ); |
| @@ -535,6 +591,7 @@ void Bu::Json::parseObject( char &c, Bu::Stream &sInput ) | |||
| 535 | uDat.pObject = new JsonHash(); | 591 | uDat.pObject = new JsonHash(); |
| 536 | 592 | ||
| 537 | next( "object" ); | 593 | next( "object" ); |
| 594 | skipWs( c, sInput ); | ||
| 538 | 595 | ||
| 539 | // Check to see if it's an empty object. | 596 | // Check to see if it's an empty object. |
| 540 | if( c == '}' ) | 597 | if( c == '}' ) |
diff --git a/src/unstable/json.h b/src/unstable/json.h index 336f1fd..4c85dd9 100644 --- a/src/unstable/json.h +++ b/src/unstable/json.h | |||
| @@ -41,6 +41,7 @@ namespace Bu | |||
| 41 | Json( bool bValue ); | 41 | Json( bool bValue ); |
| 42 | Json( Type eType ); | 42 | Json( Type eType ); |
| 43 | Json( Bu::Stream &sInput ); | 43 | Json( Bu::Stream &sInput ); |
| 44 | Json( const Json &rSrc ); | ||
| 44 | virtual ~Json(); | 45 | virtual ~Json(); |
| 45 | 46 | ||
| 46 | Type getType() const; | 47 | Type getType() const; |
| @@ -59,6 +60,7 @@ namespace Bu | |||
| 59 | 60 | ||
| 60 | bool has( const Bu::String &sKey ) const; | 61 | bool has( const Bu::String &sKey ) const; |
| 61 | void insert( const Bu::String &sKey, Bu::Json *pObj ); | 62 | void insert( const Bu::String &sKey, Bu::Json *pObj ); |
| 63 | void insert( const Bu::String &sKey, const Bu::Json &rObj ); | ||
| 62 | void insert( const Bu::String &sKey, const Bu::String &sValue ); | 64 | void insert( const Bu::String &sKey, const Bu::String &sValue ); |
| 63 | void insert( const Bu::String &sKey, const char *sValue ); | 65 | void insert( const Bu::String &sKey, const char *sValue ); |
| 64 | void insert( const Bu::String &sKey, double dValue ); | 66 | void insert( const Bu::String &sKey, double dValue ); |
| @@ -82,6 +84,8 @@ namespace Bu | |||
| 82 | Bu::String toString() const; | 84 | Bu::String toString() const; |
| 83 | Bu::String toStringStable() const; | 85 | Bu::String toStringStable() const; |
| 84 | 86 | ||
| 87 | Bu::Json &operator=( const Bu::Json &rSrc ); | ||
| 88 | |||
| 85 | private: | 89 | private: |
| 86 | void parse( char &c, Bu::Stream &sInput ); | 90 | void parse( char &c, Bu::Stream &sInput ); |
| 87 | void parseString( char &c, Bu::Stream &sInput, Bu::String &sOut ); | 91 | void parseString( char &c, Bu::Stream &sInput, Bu::String &sOut ); |
