Class: YAML::Syck::Node
- Inherits:
-
Object
- Object
- Object
- YAML::Syck::Node
- Defined in:
- rubyext.c
Instance Method Summary collapse
-
#initialize_copy ⇒ Object
Cloning method for all node types.
-
#transform ⇒ Object
YAML::Syck::Node.transform.
-
#type_id= ⇒ Object
YAML::Syck::Node#type_id=.
Instance Method Details
#initialize_copy ⇒ Object
Cloning method for all node types
|
# File 'rubyext.c'
/*
* 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 )
{
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;
}
|
#transform ⇒ Object
YAML::Syck::Node.transform
|
# File 'rubyext.c'
/*
* 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);
t = Data_Wrap_Struct( cNode, syck_node_mark, syck_free_node, 0 );
switch (orig_n->kind)
{
case syck_map_kind:
{
int i;
DATA_PTR(t) = 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;
DATA_PTR(t) = 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:
DATA_PTR(t) = 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 ) );
}
n->id = t;
return rb_funcall( oDefaultResolver, s_node_import, 1, t );
}
|
#type_id= ⇒ Object
YAML::Syck::Node#type_id=
|
# File 'rubyext.c'
/*
* 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 );
S_FREE( node->type_id );
if ( !NIL_P( type_id ) ) {
StringValue( type_id );
node->type_id = syck_strndup( RSTRING(type_id)->ptr, RSTRING(type_id)->len );
}
rb_iv_set( self, "@type_id", type_id );
return type_id;
}
|