Changeset 2165

Show
Ignore:
Timestamp:
09/20/08 21:44:21 (4 months ago)
Author:
karpet
Message:

simply the ->value by pointing directly into the internal buffer, and eliminate an extra malloc

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • libswish3/trunk/bindings/perl/XS/Token.xs

    r2164 r2165  
    66value (self) 
    77        swish_Token *   self; 
    8      
    9     PREINIT: 
    10         xmlChar *value; 
    11            
     8               
    129    CODE: 
    13         value = swish_get_token_value(self); 
    14         RETVAL = newSVpvn( (char*)value, self->len ); 
     10        RETVAL = newSVpvn( (char*)self->value, self->len ); 
    1511         
    1612    OUTPUT: 
  • libswish3/trunk/src/libswish3/libswish3.h

    r2162 r2165  
    533533int                 swish_set_token_value( 
    534534                                        swish_TokenList *tl, 
    535                                         xmlChar *token ); 
    536 xmlChar *           swish_get_token_value( swish_Token *t ); 
     535                                        xmlChar *token, 
     536                                        int len ); 
    537537swish_Token *       swish_init_token(); 
    538538void                swish_free_token( swish_Token *t ); 
  • libswish3/trunk/src/libswish3/tokenizer.c

    r2162 r2165  
    363363    int num_of_allocs; 
    364364    swish_Token *stoken; 
     365    const xmlChar *buf; 
    365366 
    366367    if (!token_len || !xmlStrlen(token)) { 
     
    373374    stoken = swish_init_token(); 
    374375    stoken->start_byte = xmlBufferLength(tl->buf); 
    375     stoken->len = token_len - 1;        /*  TODO do we even need NULL? */ 
     376     
     377    /* grab the current buffer and point ->value into the buffer */ 
     378    buf = xmlBufferContent(tl->buf); 
     379    buf += stoken->start_byte; 
     380    stoken->value = (xmlChar*)buf; 
     381     
     382    stoken->len = token_len - 1;    // -1 to exlude the NULL 
    376383    stoken->pos = ++tl->pos; 
    377384    stoken->meta = meta; 
     
    379386    stoken->context = swish_xstrdup(context); 
    380387    stoken->ref_cnt++; 
    381     swish_set_token_value(tl, token); 
     388    swish_set_token_value(tl, token, token_len); 
    382389 
    383390    num_of_allocs = tl->n / SWISH_TOKEN_LIST_SIZE; 
     
    406413swish_set_token_value( 
    407414    swish_TokenList *tl, 
    408     xmlChar *token 
     415    xmlChar *token, 
     416    int len 
    409417) 
    410418{ 
    411419    int ret; 
    412     ret = xmlBufferCat(tl->buf, token); 
     420    ret = xmlBufferAdd(tl->buf, token, len); 
    413421    if (ret != 0) { 
    414422        SWISH_CROAK("error appending token to buffer: %d", ret); 
    415423    } 
    416424    return ret; 
    417 } 
    418  
    419 xmlChar * 
    420 swish_get_token_value( 
    421     swish_Token *t 
    422 ) 
    423 { 
    424 /*     SWISH_DEBUG_MSG("get token value: '%s'  %d, %d", xmlBufferContent(tl->buf), t->start_byte, t->len); */ 
    425     return xmlStrsub(xmlBufferContent(t->list->buf), t->start_byte, t->len); 
    426425} 
    427426 
     
    494493*/ 
    495494    while ((t = swish_next_token(it)) != NULL) { 
    496         t->value = swish_get_token_value(t); 
    497495        swish_debug_token(t); 
    498496    }