From d605d6c3c04c1e26121f9b1c5c1d2dbcc5f7bc37 Mon Sep 17 00:00:00 2001 From: Mike Buland Date: Mon, 13 May 2019 19:47:19 -0700 Subject: UtfString & Json overhaul. UtfString supports a load of new stuff, and Json uses UtfString exclusively now. --- src/unstable/json.cpp | 95 ++++++++++++++++++++++++++++----------------------- 1 file changed, 53 insertions(+), 42 deletions(-) (limited to 'src/unstable/json.cpp') diff --git a/src/unstable/json.cpp b/src/unstable/json.cpp index d7e84d9..b1414a9 100644 --- a/src/unstable/json.cpp +++ b/src/unstable/json.cpp @@ -15,7 +15,7 @@ Bu::Json::Json() : Bu::Json::Json( const Bu::UtfString &sValue ) : eType( String ), - uDat( sValue.get() ) + uDat( sValue ) { } @@ -57,7 +57,7 @@ Bu::Json::Json( Type eType ) : break; case String: - uDat.pString = new Bu::String(); + uDat.pString = new Bu::UtfString(); break; case Number: @@ -75,7 +75,7 @@ Bu::Json::Json( Bu::Stream &sInput ) : parse( sInput ); } -Bu::Json::Json( char &c, Bu::Stream &sInput ) : +Bu::Json::Json( Bu::UtfChar &c, Bu::Stream &sInput ) : eType( Invalid ) { parse( c, sInput ); @@ -97,7 +97,7 @@ Bu::Json::Type Bu::Json::getType() const return eType; } -Bu::String Bu::Json::getString() const +Bu::UtfString Bu::Json::getString() const { if( eType != String ) throw Bu::ExceptionBase( @@ -132,7 +132,7 @@ bool Bu::Json::isNull() const return eType == Null; } -Bu::Json &Bu::Json::operator[]( const Bu::String &sKey ) const +Bu::Json &Bu::Json::operator[]( const Bu::UtfString &sKey ) const { if( eType != Object ) throw Bu::ExceptionBase( @@ -158,15 +158,13 @@ int Bu::Json::getSize() const return uDat.pObject->getSize(); else if( eType == Array ) return uDat.pArray->getSize(); - else if( eType == String ) - return uDat.pString->getSize(); else throw Bu::ExceptionBase( "Size requseted from json type that doesn't support it." ); } -Bu::StringList Bu::Json::getKeys() const +Bu::UtfStringList Bu::Json::getKeys() const { return uDat.pObject->getKeys(); } @@ -196,33 +194,40 @@ bool Bu::Json::has( const Bu::String &sKey ) const return uDat.pObject->has( sKey ); } -void Bu::Json::insert( const Bu::String &sKey, Bu::Json *pObj ) +Bu::Json &Bu::Json::insert( const Bu::String &sKey, Bu::Json *pObj ) { uDat.pObject->insert( sKey, pObj ); + return *this; } -void Bu::Json::insert( const Bu::String &sKey, const Bu::Json &rObj ) + +Bu::Json &Bu::Json::insert( const Bu::String &sKey, const Bu::Json &rObj ) { uDat.pObject->insert( sKey, new Bu::Json( rObj ) ); + return *this; } -void Bu::Json::insert( const Bu::String &sKey, const Bu::String &sValue ) +Bu::Json &Bu::Json::insert( const Bu::String &sKey, const Bu::String &sValue ) { uDat.pObject->insert( sKey, new Json( sValue ) ); + return *this; } -void Bu::Json::insert( const Bu::String &sKey, const char *sValue ) +Bu::Json &Bu::Json::insert( const Bu::String &sKey, const char *sValue ) { uDat.pObject->insert( sKey, new Json( sValue ) ); + return *this; } -void Bu::Json::insert( const Bu::String &sKey, double dValue ) +Bu::Json &Bu::Json::insert( const Bu::String &sKey, double dValue ) { uDat.pObject->insert( sKey, new Json( dValue ) ); + return *this; } -void Bu::Json::insert( const Bu::String &sKey, bool bValue ) +Bu::Json &Bu::Json::insert( const Bu::String &sKey, bool bValue ) { uDat.pObject->insert( sKey, new Json( bValue ) ); + return *this; } Bu::Json &Bu::Json::insertObject( const Bu::String &sKey ) @@ -239,29 +244,34 @@ Bu::Json &Bu::Json::insertArray( const Bu::String &sKey ) return *pAr; } -void Bu::Json::append( Bu::Json *pObj ) +Bu::Json &Bu::Json::append( Bu::Json *pObj ) { uDat.pArray->append( pObj ); + return *this; } -void Bu::Json::append( const Bu::String &sValue ) +Bu::Json &Bu::Json::append( const Bu::String &sValue ) { uDat.pArray->append( new Json( sValue ) ); + return *this; } -void Bu::Json::append( const char *sValue ) +Bu::Json &Bu::Json::append( const char *sValue ) { uDat.pArray->append( new Json( sValue ) ); + return *this; } -void Bu::Json::append( double dValue ) +Bu::Json &Bu::Json::append( double dValue ) { uDat.pArray->append( new Json( dValue ) ); + return *this; } -void Bu::Json::append( bool bValue ) +Bu::Json &Bu::Json::append( bool bValue ) { uDat.pArray->append( new Json( bValue ) ); + return *this; } Bu::Json &Bu::Json::appendObject() @@ -282,7 +292,7 @@ void Bu::Json::parse( Bu::Stream &sInput ) { reset(); - char c; + Bu::UtfChar c; next("json"); parse( c, sInput ); @@ -294,7 +304,7 @@ void Bu::Json::parse( const Bu::String &sInput ) parse( mb ); } -void Bu::Json::parse( char &c, Bu::Stream &sInput ) +void Bu::Json::parse( Bu::UtfChar &c, Bu::Stream &sInput ) { while( c == ' ' || c == '\t' || c == '\r' || c == '\n' ) { @@ -434,9 +444,9 @@ void Bu::Json::writeStable( Bu::Stream &sOutput ) const { sOutput.write("{", 1 ); bool bFirst = true; - Bu::List lKey = uDat.pObject->getKeys(); + Bu::List lKey = uDat.pObject->getKeys(); lKey.sort(); - for( Bu::List::iterator i = lKey.begin(); i; i++ ) + for( Bu::List::iterator i = lKey.begin(); i; i++ ) { if( bFirst == true ) bFirst = false; @@ -480,7 +490,7 @@ Bu::Json &Bu::Json::operator=( const Bu::Json &rSrc ) break; case String: - uDat.pString = new Bu::String( *rSrc.uDat.pString ); + uDat.pString = new Bu::UtfString( *rSrc.uDat.pString ); break; case Number: @@ -513,7 +523,8 @@ Bu::Json &Bu::Json::operator=( const Bu::Json &rSrc ) return *this; } -void Bu::Json::parseString( char &c, Bu::Stream &sInput, Bu::String &sOut ) +void Bu::Json::parseString( Bu::UtfChar &c, Bu::Stream &sInput, + Bu::UtfString &sOut ) { skipWs( c, sInput ); bool bEscape = false; @@ -577,14 +588,14 @@ void Bu::Json::parseString( char &c, Bu::Stream &sInput, Bu::String &sOut ) } } -void Bu::Json::parseString( char &c, Bu::Stream &sInput ) +void Bu::Json::parseString( Bu::UtfChar &c, Bu::Stream &sInput ) { eType = String; - uDat.pString = new Bu::String(); + uDat.pString = new Bu::UtfString(); parseString( c, sInput, *uDat.pString ); } -void Bu::Json::parseObject( char &c, Bu::Stream &sInput ) +void Bu::Json::parseObject( Bu::UtfChar &c, Bu::Stream &sInput ) { skipWs( c, sInput ); eType = Object; @@ -602,7 +613,7 @@ void Bu::Json::parseObject( char &c, Bu::Stream &sInput ) for(;;) { - Bu::String sKey; + Bu::UtfString sKey; parseString( c, sInput, sKey ); skipWs( c, sInput ); if( c != ':' ) @@ -628,7 +639,7 @@ void Bu::Json::parseObject( char &c, Bu::Stream &sInput ) } } -void Bu::Json::parseArray( char &c, Bu::Stream &sInput ) +void Bu::Json::parseArray( Bu::UtfChar &c, Bu::Stream &sInput ) { skipWs( c, sInput ); @@ -667,7 +678,7 @@ void Bu::Json::parseArray( char &c, Bu::Stream &sInput ) } } -void Bu::Json::parseNumber( char &c, Bu::Stream &sInput ) +void Bu::Json::parseNumber( Bu::UtfChar &c, Bu::Stream &sInput ) { skipWs( c, sInput ); @@ -702,7 +713,7 @@ void Bu::Json::parseNumber( char &c, Bu::Stream &sInput ) uDat.dNumber = atof( sBuf.getStr() ); } -void Bu::Json::parseLiteral( char &c, Bu::Stream &sInput ) +void Bu::Json::parseLiteral( Bu::UtfChar &c, Bu::Stream &sInput ) { skipWs( c, sInput ); @@ -736,27 +747,27 @@ void Bu::Json::parseLiteral( char &c, Bu::Stream &sInput ) } } -bool Bu::Json::readChar( char &c, Bu::Stream &sInput ) +bool Bu::Json::readChar( Bu::UtfChar &c, Bu::Stream &sInput ) { - if( sInput.read( &c, 1 ) == 0 ) + if( Bu::UtfString::readPoint( sInput, c ) == 0 && sInput.isEos() ) return false; return true; } -void Bu::Json::readChar( char &c, Bu::Stream &sInput, const char *sSection ) +void Bu::Json::readChar( Bu::UtfChar &c, Bu::Stream &sInput, const char *sSection ) { - if( sInput.read( &c, 1 ) == 0 ) + if( Bu::UtfString::readPoint( sInput, c ) == 0 && sInput.isEos() ) { throw Bu::ExceptionBase( sSection ); } } -bool Bu::Json::isWs( char c ) +bool Bu::Json::isWs( Bu::UtfChar c ) { return c == ' ' || c == '\t' || c == '\r' || c == '\n'; } -void Bu::Json::skipWs( char &c, Bu::Stream &sInput ) +void Bu::Json::skipWs( Bu::UtfChar &c, Bu::Stream &sInput ) { while( isWs( c ) ) { @@ -764,10 +775,10 @@ void Bu::Json::skipWs( char &c, Bu::Stream &sInput ) } } -void Bu::Json::writeStr( const Bu::String &sStr, Bu::Stream &sOutput ) const +void Bu::Json::writeStr( const Bu::UtfString &sStr, Bu::Stream &sOutput ) const { sOutput.write("\"", 1 ); - for( Bu::String::const_iterator i = sStr.begin(); i; i++ ) + for( Bu::UtfString::const_iterator i = sStr.begin(); i; i++ ) { switch( *i ) { @@ -807,12 +818,12 @@ void Bu::Json::writeStr( const Bu::String &sStr, Bu::Stream &sOutput ) const if( *i < 32 ) sOutput.write( Bu::String("\\u%1"). - arg( (int32_t)*i, Bu::Fmt::hex(4).fill('0') ). + arg( (uint32_t)*i, Bu::Fmt::hex(4).fill('0') ). end().getStr(), 6 ); else - sOutput.write( &(*i), 1 ); + Bu::UtfString::writePoint( sOutput, *i ); break; } } -- cgit v1.2.3