Ignore:
Timestamp:
06/02/06 09:03:14 (8 years ago)
Author:
xi
Message:

Add token constructors and destructors.

Add YAML_DECLARE to the API declarations (Thanks to Peter Murphy for suggestion).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libyaml/trunk/src/api.c

    r180 r183  
    1212 */ 
    1313 
    14 void * 
     14YAML_DECLARE(void *) 
    1515yaml_malloc(size_t size) 
    1616{ 
     
    2222 */ 
    2323 
    24 void * 
     24YAML_DECLARE(void *) 
    2525yaml_realloc(void *ptr, size_t size) 
    2626{ 
     
    3232 */ 
    3333 
    34 void 
     34YAML_DECLARE(void) 
    3535yaml_free(void *ptr) 
    3636{ 
     
    4242 */ 
    4343 
    44 yaml_parser_t * 
     44YAML_DECLARE(yaml_parser_t *) 
    4545yaml_parser_new(void) 
    4646{ 
     
    8383 */ 
    8484 
    85 void 
     85YAML_DECLARE(void) 
    8686yaml_parser_delete(yaml_parser_t *parser) 
    8787{ 
     
    137137 */ 
    138138 
    139 void 
     139YAML_DECLARE(void) 
    140140yaml_parser_set_input_string(yaml_parser_t *parser, 
    141141        unsigned char *input, size_t size) 
     
    157157 */ 
    158158 
    159 void 
     159YAML_DECLARE(void) 
    160160yaml_parser_set_input_file(yaml_parser_t *parser, FILE *file) 
    161161{ 
     
    172172 */ 
    173173 
    174 void 
     174YAML_DECLARE(void) 
    175175yaml_parser_set_input(yaml_parser_t *parser, 
    176176        yaml_read_handler_t *handler, void *data) 
     
    188188 */ 
    189189 
    190 void 
     190YAML_DECLARE(void) 
    191191yaml_parser_set_encoding(yaml_parser_t *parser, yaml_encoding_t encoding) 
    192192{ 
     
    197197} 
    198198 
     199/* 
     200 * Create a token. 
     201 */ 
     202 
     203YAML_DECLARE(yaml_token_t *) 
     204yaml_token_new(yaml_token_type_t type, 
     205        yaml_mark_t start_mark, yaml_mark_t end_mark) 
     206{ 
     207    yaml_token_t *token = yaml_malloc(sizeof(yaml_token_t)); 
     208 
     209    if (!token) return NULL; 
     210 
     211    memset(token, 0, sizeof(yaml_token_t)); 
     212 
     213    token->type = type; 
     214    token->start_mark = start_mark; 
     215    token->end_mark = end_mark; 
     216 
     217    return token; 
     218} 
     219 
     220/* 
     221 * Create a STREAM-START token. 
     222 */ 
     223 
     224YAML_DECLARE(yaml_token_t *) 
     225yaml_stream_start_token(yaml_encoding_t encoding, 
     226        yaml_mark_t start_mark, yaml_mark_t end_mark) 
     227{ 
     228    yaml_token_t *token = yaml_token_new(YAML_STREAM_START_TOKEN, 
     229            start_mark, end_mark); 
     230 
     231    if (!token) return NULL; 
     232 
     233    token->data.encoding = encoding; 
     234 
     235    return token; 
     236} 
     237 
     238/* 
     239 * Create a STREAM-END token. 
     240 */ 
     241 
     242YAML_DECLARE(yaml_token_t *) 
     243yaml_stream_end_token(yaml_mark_t start_mark, yaml_mark_t end_mark) 
     244{ 
     245    yaml_token_t *token = yaml_token_new(YAML_STREAM_END_TOKEN, 
     246            start_mark, end_mark); 
     247 
     248    if (!token) return NULL; 
     249 
     250    return token; 
     251} 
     252 
     253/* 
     254 * Create a VERSION-DIRECTIVE token. 
     255 */ 
     256 
     257YAML_DECLARE(yaml_token_t *) 
     258yaml_version_directive_token_new(int major, int minor, 
     259        yaml_mark_t start_mark, yaml_mark_t end_mark) 
     260{ 
     261    yaml_token_t *token = yaml_token_new(YAML_VERSION_DIRECTIVE_TOKEN, 
     262            start_mark, end_mark); 
     263 
     264    if (!token) return NULL; 
     265 
     266    token->data.version_directive.major = major; 
     267    token->data.version_directive.minor = minor; 
     268 
     269    return token; 
     270} 
     271 
     272/* 
     273 * Create a TAG-DIRECTIVE token. 
     274 */ 
     275 
     276YAML_DECLARE(yaml_token_t *) 
     277yaml_tag_directive_token_new(yaml_char_t *handle, yaml_char_t *prefix, 
     278        yaml_mark_t start_mark, yaml_mark_t end_mark) 
     279{ 
     280    yaml_token_t *token = yaml_token_new(YAML_TAG_DIRECTIVE_TOKEN, 
     281            start_mark, end_mark); 
     282 
     283    if (!token) return NULL; 
     284 
     285    token->data.tag_directive.handle = handle; 
     286    token->data.tag_directive.prefix = prefix; 
     287 
     288    return token; 
     289} 
     290 
     291/* 
     292 * Create an ALIAS token. 
     293 */ 
     294 
     295YAML_DECLARE(yaml_token_t *) 
     296yaml_alias_token_new(yaml_char_t *anchor, 
     297        yaml_mark_t start_mark, yaml_mark_t end_mark) 
     298{ 
     299    yaml_token_t *token = yaml_token_new(YAML_ALIAS_TOKEN, 
     300            start_mark, end_mark); 
     301 
     302    if (!token) return NULL; 
     303 
     304    token->data.anchor = anchor; 
     305 
     306    return token; 
     307} 
     308 
     309/* 
     310 * Create an ANCHOR token. 
     311 */ 
     312 
     313YAML_DECLARE(yaml_token_t *) 
     314yaml_anchor_token_new(yaml_char_t *anchor, 
     315        yaml_mark_t start_mark, yaml_mark_t end_mark) 
     316{ 
     317    yaml_token_t *token = yaml_token_new(YAML_ANCHOR_TOKEN, 
     318            start_mark, end_mark); 
     319 
     320    if (!token) return NULL; 
     321 
     322    token->data.anchor = anchor; 
     323 
     324    return token; 
     325} 
     326 
     327/* 
     328 * Create a TAG token. 
     329 */ 
     330 
     331YAML_DECLARE(yaml_token_t *) 
     332yaml_tag_token_new(yaml_char_t *handle, yaml_char_t *suffix, 
     333        yaml_mark_t start_mark, yaml_mark_t end_mark) 
     334{ 
     335    yaml_token_t *token = yaml_token_new(YAML_TAG_TOKEN, 
     336            start_mark, end_mark); 
     337 
     338    if (!token) return NULL; 
     339 
     340    token->data.tag.handle = handle; 
     341    token->data.tag.suffix = suffix; 
     342 
     343    return token; 
     344} 
     345 
     346/* 
     347 * Create a SCALAR token. 
     348 */ 
     349 
     350YAML_DECLARE(yaml_token_t *) 
     351yaml_scalar_token_new(yaml_char_t *value, size_t length, 
     352        yaml_scalar_style_t style, 
     353        yaml_mark_t start_mark, yaml_mark_t end_mark) 
     354{ 
     355    yaml_token_t *token = yaml_token_new(YAML_SCALAR_TOKEN, 
     356            start_mark, end_mark); 
     357 
     358    if (!token) return NULL; 
     359 
     360    token->data.scalar.value = value; 
     361    token->data.scalar.length = length; 
     362    token->data.scalar.style = style; 
     363 
     364    return token; 
     365} 
     366 
     367/* 
     368 * Destroy a token object. 
     369 */ 
     370 
     371YAML_DECLARE(void) 
     372yaml_token_delete(yaml_token_t *token) 
     373{ 
     374    assert(token);  /* Non-NULL token object expected. */ 
     375 
     376    switch (token->type) 
     377    { 
     378        case YAML_TAG_DIRECTIVE_TOKEN: 
     379            yaml_free(token->data.tag_directive.handle); 
     380            yaml_free(token->data.tag_directive.prefix); 
     381            break; 
     382 
     383        case YAML_ALIAS_TOKEN: 
     384        case YAML_ANCHOR_TOKEN: 
     385            yaml_free(token->data.anchor); 
     386            break; 
     387 
     388        case YAML_TAG_TOKEN: 
     389            yaml_free(token->data.tag.handle); 
     390            yaml_free(token->data.tag.suffix); 
     391            break; 
     392 
     393        case YAML_SCALAR_TOKEN: 
     394            yaml_free(token->data.scalar.value); 
     395            break; 
     396    } 
     397 
     398    memset(token, 0, sizeof(yaml_token_t)); 
     399 
     400    yaml_free(token); 
     401} 
     402 
Note: See TracChangeset for help on using the changeset viewer.