Ignore:
Timestamp:
07/03/06 09:34:57 (8 years ago)
Author:
xi
Message:

Add event constructors and destructors.

File:
1 edited

Legend:

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

    r190 r199  
    277277    if (!token) return NULL; 
    278278 
    279     token->data.encoding = encoding; 
     279    token->data.stream_start.encoding = encoding; 
    280280 
    281281    return token; 
     
    348348    if (!token) return NULL; 
    349349 
    350     token->data.anchor = anchor; 
     350    token->data.alias.value = anchor; 
    351351 
    352352    return token; 
     
    366366    if (!token) return NULL; 
    367367 
    368     token->data.anchor = anchor; 
     368    token->data.anchor.value = anchor; 
    369369 
    370370    return token; 
     
    428428 
    429429        case YAML_ALIAS_TOKEN: 
     430            yaml_free(token->data.alias.value); 
     431            break; 
     432 
    430433        case YAML_ANCHOR_TOKEN: 
    431             yaml_free(token->data.anchor); 
     434            yaml_free(token->data.anchor.value); 
    432435            break; 
    433436 
     
    447450} 
    448451 
     452/* 
     453 * Create an event. 
     454 */ 
     455 
     456static yaml_event_t * 
     457yaml_event_new(yaml_event_type_t type, 
     458        yaml_mark_t start_mark, yaml_mark_t end_mark) 
     459{ 
     460    yaml_event_t *event = yaml_malloc(sizeof(yaml_event_t)); 
     461 
     462    if (!event) return NULL; 
     463 
     464    memset(event, 0, sizeof(yaml_event_t)); 
     465 
     466    event->type = type; 
     467    event->start_mark = start_mark; 
     468    event->end_mark = end_mark; 
     469 
     470    return event; 
     471} 
     472 
     473/* 
     474 * Create a STREAM-START event. 
     475 */ 
     476 
     477YAML_DECLARE(yaml_event_t *) 
     478yaml_stream_start_event_new(yaml_encoding_t encoding, 
     479        yaml_mark_t start_mark, yaml_mark_t end_mark) 
     480{ 
     481    yaml_event_t *event = yaml_event_new(YAML_STREAM_START_EVENT, 
     482            start_mark, end_mark); 
     483 
     484    if (!event) return NULL; 
     485 
     486    event->data.stream_start.encoding = encoding; 
     487 
     488    return event; 
     489} 
     490 
     491/* 
     492 * Create a STREAM-END event. 
     493 */ 
     494 
     495YAML_DECLARE(yaml_event_t *) 
     496yaml_stream_end_event_new(yaml_mark_t start_mark, yaml_mark_t end_mark) 
     497{ 
     498    return yaml_event_new(YAML_STREAM_END_EVENT, start_mark, end_mark); 
     499} 
     500 
     501/* 
     502 * Create a DOCUMENT-START event. 
     503 */ 
     504 
     505YAML_DECLARE(yaml_event_t *) 
     506yaml_document_start_event_new(yaml_version_directive_t *version_directive, 
     507        yaml_tag_directive_t **tag_directives, int implicit, 
     508        yaml_mark_t start_mark, yaml_mark_t end_mark) 
     509{ 
     510    yaml_event_t *event = yaml_event_new(YAML_DOCUMENT_START_EVENT, 
     511            start_mark, end_mark); 
     512 
     513    if (!event) return NULL; 
     514 
     515    event->data.document_start.version_directive = version_directive; 
     516    event->data.document_start.tag_directives = tag_directives; 
     517    event->data.document_start.implicit = implicit; 
     518 
     519    return event; 
     520} 
     521 
     522/* 
     523 * Create a DOCUMENT-END event. 
     524 */ 
     525 
     526YAML_DECLARE(yaml_event_t *) 
     527yaml_document_end_event_new(int implicit, 
     528        yaml_mark_t start_mark, yaml_mark_t end_mark) 
     529{ 
     530    yaml_event_t *event = yaml_event_new(YAML_DOCUMENT_END_EVENT, 
     531            start_mark, end_mark); 
     532 
     533    if (!event) return NULL; 
     534 
     535    event->data.document_end.implicit = implicit; 
     536 
     537    return event; 
     538} 
     539 
     540/* 
     541 * Create an ALIAS event. 
     542 */ 
     543 
     544YAML_DECLARE(yaml_event_t *) 
     545yaml_alias_event_new(yaml_char_t *anchor, 
     546        yaml_mark_t start_mark, yaml_mark_t end_mark) 
     547{ 
     548    yaml_event_t *event = yaml_event_new(YAML_ALIAS_EVENT, 
     549            start_mark, end_mark); 
     550 
     551    if (!event) return NULL; 
     552 
     553    event->data.alias.anchor = anchor; 
     554 
     555    return event; 
     556} 
     557 
     558/* 
     559 * Create a SCALAR event. 
     560 */ 
     561 
     562YAML_DECLARE(yaml_event_t *) 
     563yaml_scalar_event_new(yaml_char_t *anchor, yaml_char_t *tag, 
     564        yaml_char_t *value, size_t length, 
     565        int plain_implicit, int quoted_implicit, 
     566        yaml_scalar_style_t style, 
     567        yaml_mark_t start_mark, yaml_mark_t end_mark) 
     568{ 
     569    yaml_event_t *event = yaml_event_new(YAML_SCALAR_EVENT, 
     570            start_mark, end_mark); 
     571 
     572    if (!event) return NULL; 
     573 
     574    event->data.scalar.anchor = anchor; 
     575    event->data.scalar.tag = tag; 
     576    event->data.scalar.value = value; 
     577    event->data.scalar.length = length; 
     578    event->data.scalar.plain_implicit = plain_implicit; 
     579    event->data.scalar.quoted_implicit = quoted_implicit; 
     580    event->data.scalar.style = style; 
     581 
     582    return event; 
     583} 
     584 
     585/* 
     586 * Create a SEQUENCE-START event. 
     587 */ 
     588 
     589YAML_DECLARE(yaml_event_t *) 
     590yaml_sequence_start_new(yaml_char_t *anchor, yaml_char_t *tag, 
     591        int implicit, yaml_sequence_style_t style, 
     592        yaml_mark_t start_mark, yaml_mark_t end_mark) 
     593{ 
     594    yaml_event_t *event = yaml_event_new(YAML_SEQUENCE_START_EVENT, 
     595            start_mark, end_mark); 
     596 
     597    if (!event) return NULL; 
     598 
     599    event->data.sequence_start.anchor = anchor; 
     600    event->data.sequence_start.tag = tag; 
     601    event->data.sequence_start.implicit = implicit; 
     602    event->data.sequence_start.style = style; 
     603 
     604    return event; 
     605} 
     606 
     607/* 
     608 * Create a SEQUENCE-END event. 
     609 */ 
     610 
     611YAML_DECLARE(yaml_event_t *) 
     612yaml_sequence_end_event_new(yaml_mark_t start_mark, yaml_mark_t end_mark) 
     613{ 
     614    return yaml_event_new(YAML_SEQUENCE_END_EVENT, start_mark, end_mark); 
     615} 
     616 
     617/* 
     618 * Create a MAPPING-START event. 
     619 */ 
     620 
     621YAML_DECLARE(yaml_event_t *) 
     622yaml_mapping_start_new(yaml_char_t *anchor, yaml_char_t *tag, 
     623        int implicit, yaml_mapping_style_t style, 
     624        yaml_mark_t start_mark, yaml_mark_t end_mark) 
     625{ 
     626    yaml_event_t *event = yaml_event_new(YAML_MAPPING_START_EVENT, 
     627            start_mark, end_mark); 
     628 
     629    if (!event) return NULL; 
     630 
     631    event->data.mapping_start.anchor = anchor; 
     632    event->data.mapping_start.tag = tag; 
     633    event->data.mapping_start.implicit = implicit; 
     634    event->data.mapping_start.style = style; 
     635 
     636    return event; 
     637} 
     638 
     639/* 
     640 * Create a MAPPING-END event. 
     641 */ 
     642 
     643YAML_DECLARE(yaml_event_t *) 
     644yaml_mapping_end_event_new(yaml_mark_t start_mark, yaml_mark_t end_mark) 
     645{ 
     646    return yaml_event_new(YAML_MAPPING_END_EVENT, start_mark, end_mark); 
     647} 
     648 
     649/* 
     650 * Destroy an event object. 
     651 */ 
     652 
     653YAML_DECLARE(void) 
     654yaml_event_delete(yaml_event_t *event) 
     655{ 
     656    assert(event);  /* Non-NULL event object expected. */ 
     657 
     658    switch (event->type) 
     659    { 
     660        case YAML_DOCUMENT_START_EVENT: 
     661            yaml_free(event->data.document_start.version_directive); 
     662            if (event->data.document_start.tag_directives) { 
     663                yaml_tag_directive_t **tag_directive; 
     664                for (tag_directive = event->data.document_start.tag_directives; 
     665                        *tag_directive; tag_directive++) { 
     666                    yaml_free((*tag_directive)->handle); 
     667                    yaml_free((*tag_directive)->prefix); 
     668                    yaml_free(*tag_directive); 
     669                } 
     670                yaml_free(event->data.document_start.tag_directives); 
     671            } 
     672            break; 
     673 
     674        case YAML_ALIAS_EVENT: 
     675            yaml_free(event->data.alias.anchor); 
     676            break; 
     677 
     678        case YAML_SCALAR_EVENT: 
     679            yaml_free(event->data.scalar.anchor); 
     680            yaml_free(event->data.scalar.tag); 
     681            yaml_free(event->data.scalar.value); 
     682            break; 
     683 
     684        case YAML_SEQUENCE_START_EVENT: 
     685            yaml_free(event->data.sequence_start.anchor); 
     686            yaml_free(event->data.sequence_start.tag); 
     687            break; 
     688 
     689        case YAML_MAPPING_START_EVENT: 
     690            yaml_free(event->data.mapping_start.anchor); 
     691            yaml_free(event->data.mapping_start.tag); 
     692            break; 
     693    } 
     694 
     695    memset(event, 0, sizeof(yaml_event_t)); 
     696 
     697    yaml_free(event); 
     698} 
     699 
Note: See TracChangeset for help on using the changeset viewer.