diff options
author | Aaron <aaron@10gen.com> | 2009-01-14 17:17:24 -0500 |
---|---|---|
committer | Aaron <aaron@10gen.com> | 2009-01-14 17:17:24 -0500 |
commit | 248a6dd8deab804423944ad1d0bdf234200fef84 (patch) | |
tree | afd4a0e40f8818187903108e4c38a34bf4097482 /db/json.cpp | |
parent | ad1f6b3cbdd1183eedc04f98fa813e63ce68a408 (diff) | |
download | mongo-248a6dd8deab804423944ad1d0bdf234200fef84.tar.gz |
Replace tab indentation with spaces
Diffstat (limited to 'db/json.cpp')
-rw-r--r-- | db/json.cpp | 202 |
1 files changed, 104 insertions, 98 deletions
diff --git a/db/json.cpp b/db/json.cpp index 24ea7e8d16f..05cc669486e 100644 --- a/db/json.cpp +++ b/db/json.cpp @@ -25,9 +25,13 @@ using namespace boost::spirit; namespace mongo { struct ObjectBuilder { - BSONObjBuilder *back() { return builders.back().get(); } + BSONObjBuilder *back() { + return builders.back().get(); + } // Storage for field names of elements within builders.back(). - const char *fieldName() { return fieldNames.back().c_str(); } + const char *fieldName() { + return fieldNames.back().c_str(); + } void push() { boost::shared_ptr< BSONObjBuilder > b( new BSONObjBuilder() ); builders.push_back( b ); @@ -42,7 +46,7 @@ struct ObjectBuilder { return ret; } void nameFromIndex() { - fieldNames.back() = BSONObjBuilder::numStr( indexes.back() ); + fieldNames.back() = BSONObjBuilder::numStr( indexes.back() ); } string popString() { string ret = ss.str(); @@ -101,33 +105,33 @@ struct chE { chE( ObjectBuilder &_b ) : b( _b ) {} void operator() ( const char c ) const { char o = '\0'; - switch( c ) { - case '\"': - o = '\"'; - break; - case '\\': - o = '\\'; - break; - case '/': - o = '/'; - break; - case 'b': - o = '\b'; - break; - case 'f': - o = '\f'; - break; - case 'n': - o = '\n'; - break; - case 'r': - o = '\r'; - break; - case 't': - o = '\t'; - break; - default: - assert( false ); + switch ( c ) { + case '\"': + o = '\"'; + break; + case '\\': + o = '\\'; + break; + case '/': + o = '/'; + break; + case 'b': + o = '\b'; + break; + case 'f': + o = '\f'; + break; + case 'n': + o = '\n'; + break; + case 'r': + o = '\r'; + break; + case 't': + o = '\t'; + break; + default: + assert( false ); } b.ss << o; } @@ -135,19 +139,19 @@ struct chE { }; namespace hex { - int val( char c ) { - if ( '0' <= c && c <= '9' ) - return c - '0'; - if ( 'a' <= c && c <= 'f' ) - return c - 'a' + 10; - if ( 'A' <= c && c <= 'F' ) - return c - 'A' + 10; - assert( false ); - return 0xff; - } - char val( const char *c ) { - return ( val( c[ 0 ] ) << 4 ) | val( c[ 1 ] ); - } +int val( char c ) { + if ( '0' <= c && c <= '9' ) + return c - '0'; + if ( 'a' <= c && c <= 'f' ) + return c - 'a' + 10; + if ( 'A' <= c && c <= 'F' ) + return c - 'A' + 10; + assert( false ); + return 0xff; +} +char val( const char *c ) { + return ( val( c[ 0 ] ) << 4 ) | val( c[ 1 ] ); +} } // namespace hex struct chU { @@ -182,16 +186,16 @@ struct fieldNameEnd { void operator() ( const char *start, const char *end ) const { string name = b.popString(); massert( "Invalid use of reserved field name", - name != "$ns" && - name != "$id" && - name != "$binary" && - name != "$type" && - name != "$date" && - name != "$regex" && - name != "$options" ); + name != "$ns" && + name != "$id" && + name != "$binary" && + name != "$type" && + name != "$date" && + name != "$regex" && + name != "$options" ); b.fieldNames.back() = name; } - ObjectBuilder &b; + ObjectBuilder &b; }; struct stringEnd { @@ -264,7 +268,7 @@ struct dbrefNS { OID stringToOid( const char *s ) { OID oid; char *oidP = (char *)( &oid ); - for( int i = 0; i < 12; ++i ) + for ( int i = 0; i < 12; ++i ) oidP[ i ] = hex::val( s[ i * 2 ] ); return oid; } @@ -301,23 +305,23 @@ struct oidEnd { // boost's conversion. struct binDataBinary { typedef - boost::archive::iterators::transform_width - < boost::archive::iterators::binary_from_base64 - < string::const_iterator >, 8, 6 - > binary_t; + boost::archive::iterators::transform_width + < boost::archive::iterators::binary_from_base64 + < string::const_iterator >, 8, 6 + > binary_t; binDataBinary( ObjectBuilder &_b ) : b( _b ) {} void operator() ( const char *start, const char *end ) const { massert( "Badly formatted bindata", ( end - start ) % 4 == 0 ); string base64( start, end ); int len = base64.length(); int pad = 0; - for(; len - pad > 0 && base64[ len - 1 - pad ] == '='; ++pad ) + for (; len - pad > 0 && base64[ len - 1 - pad ] == '='; ++pad ) base64[ len - 1 - pad ] = 'A'; massert( "Badly formatted bindata", pad < 3 ); b.binData = string( binary_t( base64.begin() ), binary_t( base64.end() ) ); b.binData.resize( b.binData.length() - pad ); } - ObjectBuilder &b; + ObjectBuilder &b; }; struct binDataType { @@ -332,7 +336,7 @@ struct binDataEnd { binDataEnd( ObjectBuilder &_b ) : b( _b ) {} void operator() ( const char *start, const char *end ) const { b.back()->appendBinData( b.fieldName(), b.binData.length(), - b.binDataType, b.binData.data() ); + b.binDataType, b.binData.data() ); } ObjectBuilder &b; }; @@ -358,7 +362,7 @@ struct regexValue { void operator() ( const char *start, const char *end ) const { b.regex = b.popString(); } - ObjectBuilder &b; + ObjectBuilder &b; }; struct regexOptions { @@ -366,16 +370,16 @@ struct regexOptions { void operator() ( const char *start, const char *end ) const { b.regexOptions = string( start, end ); } - ObjectBuilder &b; + ObjectBuilder &b; }; struct regexEnd { regexEnd( ObjectBuilder &_b ) : b( _b ) {} void operator() ( const char *start, const char *end ) const { b.back()->appendRegex( b.fieldName(), b.regex.c_str(), - b.regexOptions.c_str() ); + b.regexOptions.c_str() ); } - ObjectBuilder &b; + ObjectBuilder &b; }; // One gotcha with this parsing library is probably best ilustrated with an @@ -395,7 +399,7 @@ struct regexEnd { struct JsonGrammar : public grammar< JsonGrammar > { public: JsonGrammar( ObjectBuilder &_b ) : b( _b ) {} - + template < typename ScannerT > struct definition { definition( JsonGrammar const &self ) { @@ -420,38 +424,38 @@ public: lexeme_d[ str_p( "null" ) ][ nullValue( self.b ) ]; // lexeme_d and rules don't mix well, so we have this mess str = lexeme_d[ ch_p( '"' )[ chClear( self.b ) ] >> - *( ( ch_p( '\\' ) >> - ( ch_p( '"' )[ chE( self.b ) ] | - ch_p( '\\' )[ chE( self.b ) ] | - ch_p( '/' )[ chE( self.b ) ] | - ch_p( 'b' )[ chE( self.b ) ] | - ch_p( 'f' )[ chE( self.b ) ] | - ch_p( 'n' )[ chE( self.b ) ] | - ch_p( 'r' )[ chE( self.b ) ] | - ch_p( 't' )[ chE( self.b ) ] | - ( ch_p( 'u' ) >> ( repeat_p( 4 )[ xdigit_p ][ chU( self.b ) ] ) ) ) ) | - ch_p( '\x7f' )[ ch( self.b ) ] | - ( ~cntrl_p & ~ch_p( '"' ) & ( ~ch_p( '\\' ) )[ ch( self.b ) ] ) ) >> '"' ]; + *( ( ch_p( '\\' ) >> + ( ch_p( '"' )[ chE( self.b ) ] | + ch_p( '\\' )[ chE( self.b ) ] | + ch_p( '/' )[ chE( self.b ) ] | + ch_p( 'b' )[ chE( self.b ) ] | + ch_p( 'f' )[ chE( self.b ) ] | + ch_p( 'n' )[ chE( self.b ) ] | + ch_p( 'r' )[ chE( self.b ) ] | + ch_p( 't' )[ chE( self.b ) ] | + ( ch_p( 'u' ) >> ( repeat_p( 4 )[ xdigit_p ][ chU( self.b ) ] ) ) ) ) | + ch_p( '\x7f' )[ ch( self.b ) ] | + ( ~cntrl_p & ~ch_p( '"' ) & ( ~ch_p( '\\' ) )[ ch( self.b ) ] ) ) >> '"' ]; // real_p accepts numbers with nonsignificant zero prefixes, which // aren't allowed in JSON. Oh well. number = real_p[ numberValue( self.b ) ]; dbref = dbrefS | dbrefT; dbrefS = ch_p( '{' ) >> "\"$ns\"" >> ':' >> - str[ dbrefNS( self.b ) ] >> ',' >> "\"$id\"" >> ':' >> quotedOid >> '}'; + str[ dbrefNS( self.b ) ] >> ',' >> "\"$id\"" >> ':' >> quotedOid >> '}'; dbrefT = str_p( "Dbref" ) >> '(' >> str[ dbrefNS( self.b ) ] >> ',' >> - quotedOid >> ')'; + quotedOid >> ')'; // FIXME Only object id if top level field? oid = oidS | oidT; oidS = str_p( "\"_id\"" ) >> ':' >> quotedOid; oidT = str_p( "\"_id\"" ) >> ':' >> "ObjectId" >> '(' >> quotedOid >> ')'; - + quotedOid = lexeme_d[ '"' >> ( repeat_p( 24 )[ xdigit_p ] )[ oidValue( self.b ) ] >> '"' ]; - + bindata = ch_p( '{' ) >> "\"$binary\"" >> ':' >> - lexeme_d[ '"' >> ( *( range_p( 'A', 'Z' ) | range_p( 'a', 'z' ) | range_p( '0', '9' ) | ch_p( '+' ) | ch_p( '/' ) ) >> *ch_p( '=' ) )[ binDataBinary( self.b ) ] >> '"' ] >> ',' >> "\"$type\"" >> ':' >> - lexeme_d[ '"' >> ( repeat_p( 2 )[ xdigit_p ] )[ binDataType( self.b ) ] >> '"' ] >> '}'; + lexeme_d[ '"' >> ( *( range_p( 'A', 'Z' ) | range_p( 'a', 'z' ) | range_p( '0', '9' ) | ch_p( '+' ) | ch_p( '/' ) ) >> *ch_p( '=' ) )[ binDataBinary( self.b ) ] >> '"' ] >> ',' >> "\"$type\"" >> ':' >> + lexeme_d[ '"' >> ( repeat_p( 2 )[ xdigit_p ] )[ binDataType( self.b ) ] >> '"' ] >> '}'; date = dateS | dateT; dateS = ch_p( '{' ) >> "\"$date\"" >> ':' >> uint_parser< unsigned long long >()[ dateValue( self.b ) ] >> '}'; @@ -461,24 +465,26 @@ public: regexS = ch_p( '{' ) >> "\"$regex\"" >> ':' >> str[ regexValue( self.b ) ] >> ',' >> "\"$options\"" >> ':' >> lexeme_d[ '"' >> ( *( alpha_p ) )[ regexOptions( self.b ) ] >> '"' ] >> '}'; // FIXME Obviously it would be nice to unify this with str. regexT = lexeme_d[ ch_p( '/' )[ chClear( self.b ) ] >> - *( ( ch_p( '\\' ) >> - ( ch_p( '"' )[ chE( self.b ) ] | - ch_p( '\\' )[ chE( self.b ) ] | - ch_p( '/' )[ chE( self.b ) ] | - ch_p( 'b' )[ chE( self.b ) ] | - ch_p( 'f' )[ chE( self.b ) ] | - ch_p( 'n' )[ chE( self.b ) ] | - ch_p( 'r' )[ chE( self.b ) ] | - ch_p( 't' )[ chE( self.b ) ] | - ( ch_p( 'u' ) >> ( repeat_p( 4 )[ xdigit_p ][ chU( self.b ) ] ) ) ) ) | - ch_p( '\x7f' )[ ch( self.b ) ] | - ( ~cntrl_p & ~ch_p( '/' ) & ( ~ch_p( '\\' ) )[ ch( self.b ) ] ) ) >> str_p( "/" )[ regexValue( self.b ) ] - >> ( *( ch_p( 'i' ) | ch_p( 'g' ) | ch_p( 'm' ) ) )[ regexOptions( self.b ) ] ]; + *( ( ch_p( '\\' ) >> + ( ch_p( '"' )[ chE( self.b ) ] | + ch_p( '\\' )[ chE( self.b ) ] | + ch_p( '/' )[ chE( self.b ) ] | + ch_p( 'b' )[ chE( self.b ) ] | + ch_p( 'f' )[ chE( self.b ) ] | + ch_p( 'n' )[ chE( self.b ) ] | + ch_p( 'r' )[ chE( self.b ) ] | + ch_p( 't' )[ chE( self.b ) ] | + ( ch_p( 'u' ) >> ( repeat_p( 4 )[ xdigit_p ][ chU( self.b ) ] ) ) ) ) | + ch_p( '\x7f' )[ ch( self.b ) ] | + ( ~cntrl_p & ~ch_p( '/' ) & ( ~ch_p( '\\' ) )[ ch( self.b ) ] ) ) >> str_p( "/" )[ regexValue( self.b ) ] + >> ( *( ch_p( 'i' ) | ch_p( 'g' ) | ch_p( 'm' ) ) )[ regexOptions( self.b ) ] ]; } rule< ScannerT > object, members, pair, array, elements, value, str, number, - dbref, dbrefS, dbrefT, oid, oidS, oidT, bindata, date, dateS, dateT, - regex, regexS, regexT, quotedOid; - const rule< ScannerT > &start() const { return object; } + dbref, dbrefS, dbrefT, oid, oidS, oidT, bindata, date, dateS, dateT, + regex, regexS, regexT, quotedOid; + const rule< ScannerT > &start() const { + return object; + } }; ObjectBuilder &b; }; |