| Class | YAML::Syck::Node |
| In: |
syck/rubyext.c
|
| Parent: | Object |
Cloning method for all node types
/*
* Cloning method for all node types
*/
VALUE
syck_node_init_copy( copy, orig )
VALUE copy, orig;
{
SyckNode *copy_n;
SyckNode *orig_n;
if ( copy == orig )
return copy;
if ( TYPE( orig ) != T_DATA ||
RDATA( orig )->dfree != ( RUBY_DATA_FUNC )rb_syck_free_node )
{
rb_raise( rb_eTypeError, "wrong argument type" );
}
Data_Get_Struct( orig, SyckNode, orig_n );
Data_Get_Struct( copy, SyckNode, copy_n );
MEMCPY( copy_n, orig_n, SyckNode, 1 );
return copy;
}
/*
* YAML::Syck::Node.transform
*/
VALUE
syck_node_transform( self )
VALUE self;
{
VALUE t;
SyckNode *n;
SyckNode *orig_n;
Data_Get_Struct(self, SyckNode, orig_n);
switch (orig_n->kind)
{
case syck_map_kind:
{
int i;
n = syck_alloc_map();
for ( i = 0; i < orig_n->data.pairs->idx; i++ )
{
syck_map_add( n, rb_funcall( syck_map_read( orig_n, map_key, i ), s_transform, 0 ),
rb_funcall( syck_map_read( orig_n, map_value, i ), s_transform, 0 ) );
}
}
break;
case syck_seq_kind:
{
int i;
n = syck_alloc_seq();
for ( i = 0; i < orig_n->data.list->idx; i++ )
{
syck_seq_add( n, rb_funcall( syck_seq_read( orig_n, i ), s_transform, 0 ) );
}
}
break;
case syck_str_kind:
n = syck_new_str2( orig_n->data.str->ptr, orig_n->data.str->len, orig_n->data.str->style );
break;
}
if ( orig_n->type_id != NULL )
{
n->type_id = syck_strndup( orig_n->type_id, strlen( orig_n->type_id ) );
}
if ( orig_n->anchor != NULL )
{
n->anchor = syck_strndup( orig_n->anchor, strlen( orig_n->anchor ) );
}
t = Data_Wrap_Struct( cNode, NULL, NULL, n );
n->id = t;
t = rb_funcall( oDefaultResolver, s_node_import, 1, t );
syck_free_node( n );
return t;
}
YAML::Syck::Node#type_id=
/*
* YAML::Syck::Node#type_id=
*/
VALUE
syck_node_type_id_set( self, type_id )
VALUE self, type_id;
{
SyckNode *node;
Data_Get_Struct( self, SyckNode, node );
if ( node->type_id != NULL ) S_FREE( node->type_id );
if ( NIL_P( type_id ) ) {
node->type_id = NULL;
} else {
node->type_id = StringValuePtr( type_id );
}
rb_iv_set( self, "@type_id", type_id );
return type_id;
}