Changeset 8180


Ignore:
Timestamp:
Apr 8, 2009, 5:37:56 PM (14 years ago)
Author:
charles
Message:

(1.5x libT) faster serialization from tr_benc structs into json and benc formats

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/1.5x/libtransmission/bencode.c

    r7908 r8180  
    10171017                   void *              evbuf )
    10181018{
    1019     evbuffer_add_printf( evbuf, "d" );
     1019    evbuffer_add( evbuf, "d", 1 );
    10201020}
    10211021
     
    10241024                   void *              evbuf )
    10251025{
    1026     evbuffer_add_printf( evbuf, "l" );
     1026    evbuffer_add( evbuf, "l", 1 );
    10271027}
    10281028
     
    10311031                      void *              evbuf )
    10321032{
    1033     evbuffer_add_printf( evbuf, "e" );
     1033    evbuffer_add( evbuf, "e", 1 );
    10341034}
    10351035
     
    11191119jsonIndent( struct jsonWalk * data )
    11201120{
     1121    char buf[1024];
    11211122    const int width = tr_list_size( data->parents ) * 4;
    11221123
    1123     evbuffer_add_printf( data->out, "\n%*.*s", width, width, " " );
     1124    buf[0] = '\n';
     1125    memset( buf+1, ' ', width );
     1126    evbuffer_add( data->out, buf, 1+width );
    11241127}
    11251128
     
    11371140                const int i = parentState->childIndex++;
    11381141                if( !( i % 2 ) )
    1139                     evbuffer_add_printf( data->out, ": " );
     1142                    evbuffer_add( data->out, ": ", 2 );
    11401143                else
    11411144                {
    1142                     evbuffer_add_printf( data->out, ", " );
     1145                    evbuffer_add( data->out, ", ", 2 );
    11431146                    jsonIndent( data );
    11441147                }
     
    11491152            {
    11501153                ++parentState->childIndex;
    1151                 evbuffer_add_printf( data->out, ", " );
     1154                evbuffer_add( data->out, ", ", 2 );
    11521155                jsonIndent( data );
    11531156                break;
     
    11951198    const unsigned char *it, *end;
    11961199
    1197     evbuffer_add_printf( data->out, "\"" );
     1200    evbuffer_add( data->out, "\"", 1 );
    11981201    for( it = (const unsigned char*)val->val.s.s, end = it + val->val.s.i;
    11991202         it != end; ++it )
     
    12021205        {
    12031206            case '/':
    1204                 evbuffer_add_printf( data->out, "\\/" ); break;
    1205 
    12061207            case '\b':
    1207                 evbuffer_add_printf( data->out, "\\b" ); break;
    1208 
    12091208            case '\f':
    1210                 evbuffer_add_printf( data->out, "\\f" ); break;
    1211 
    12121209            case '\n':
    1213                 evbuffer_add_printf( data->out, "\\n" ); break;
    1214 
    12151210            case '\r':
    1216                 evbuffer_add_printf( data->out, "\\r" ); break;
    1217 
    12181211            case '\t':
    1219                 evbuffer_add_printf( data->out, "\\t" ); break;
    1220 
    12211212            case '"':
    1222                 evbuffer_add_printf( data->out, "\\\"" ); break;
    1223 
    1224             case '\\':
    1225                 evbuffer_add_printf( data->out, "\\\\" ); break;
     1213            case '\\': {
     1214                char buf[2] = { '\\', *it };
     1215                evbuffer_add( data->out, buf, 2 );
     1216                break;
     1217            }
    12261218
    12271219            default:
     
    12291221                {
    12301222                    /*fprintf( stderr, "[%c]\n", *it );*/
    1231                     evbuffer_add_printf( data->out, "%c", *it );
     1223                    evbuffer_add( data->out, it, 1 );
    12321224                }
    12331225                else
     
    12471239        }
    12481240    }
    1249     evbuffer_add_printf( data->out, "\"" );
     1241    evbuffer_add( data->out, "\"", 1 );
    12501242    jsonChildFunc( data );
    12511243}
     
    12581250
    12591251    jsonPushParent( data, val );
    1260     evbuffer_add_printf( data->out, "{" );
     1252    evbuffer_add( data->out, "{", 1 );
    12611253    if( val->val.l.count )
    12621254        jsonIndent( data );
     
    12711263
    12721264    jsonPushParent( data, val );
    1273     evbuffer_add_printf( data->out, "[" );
     1265    evbuffer_add( data->out, "[", 1 );
    12741266    if( nChildren )
    12751267        jsonIndent( data );
     
    13011293        jsonIndent( data );
    13021294    if( tr_bencIsDict( val ) )
    1303         evbuffer_add_printf( data->out, "}" );
     1295        evbuffer_add( data->out, "}", 1 );
    13041296    else /* list */
    1305         evbuffer_add_printf( data->out, "]" );
     1297        evbuffer_add( data->out, "]", 1 );
    13061298    jsonChildFunc( data );
    13071299}
Note: See TracChangeset for help on using the changeset viewer.