From: Tilman Sauerbeck Date: Thu, 9 Jun 2005 17:47:46 +0000 (+0000) Subject: Tweaked for_each_prop(). X-Git-Tag: ruby-eet-0.1.4~23 X-Git-Url: http://git.code-monkey.de/?p=ruby-eet.git;a=commitdiff_plain;h=b0bad9534611464914a7d7f5563b515e180e1f20 Tweaked for_each_prop(). Use rb_ary_push() to add chunks to a stream instead of calling Stream#push. --- diff --git a/ChangeLog b/ChangeLog index 26487df..70f076f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,5 @@ -- -$Id: ChangeLog 62 2005-06-09 17:42:34Z tilman $ +$Id: ChangeLog 63 2005-06-09 17:47:46Z tilman $ ++ 2005-06-09 Tilman Sauerbeck (tilman at code-monkey de) @@ -8,6 +8,8 @@ $Id: ChangeLog 62 2005-06-09 17:42:34Z tilman $ * ext/ext.c, test/test_stream.rb: If Stream#serialize is called on a stream that includes non-Chunk elements, BadElementError is raised + * ext/ext.c: Tweaked for_each_prop; use rb_ary_push() to add + chunks to the stream instead of calling Stream#push 2005-06-08 Tilman Sauerbeck (tilman at code-monkey de) * ext/ext.c, lib/eet.rb, test/test_basic.rb: diff --git a/ext/ext.c b/ext/ext.c index 8fe22e3..e36442f 100644 --- a/ext/ext.c +++ b/ext/ext.c @@ -1,5 +1,5 @@ /* - * $Id: ext.c 62 2005-06-09 17:42:34Z tilman $ + * $Id: ext.c 63 2005-06-09 17:47:46Z tilman $ * * Copyright (c) 2005 Tilman Sauerbeck (tilman at code-monkey de) * @@ -51,7 +51,7 @@ static VALUE cStream, cChunk, eBadElementError, sym_lossy, sym_level, sym_quality, sym_char, sym_short, sym_long_long, sym_double; -static ID id_include, id_serialize, id_push, id_keys, +static ID id_include, id_serialize, id_keys, id_to_eet_chunks, id_to_eet_name, id_to_eet_properties, id_tag, id_data; @@ -531,8 +531,9 @@ chunk_serialize (VALUE self) static int for_each_prop (VALUE tag, VALUE arg, VALUE stream) { - VALUE value, type, chunks; - long len, i; + VALUE value, type, tmp; + struct RArray *chunks; + long i; if (rb_obj_is_kind_of (arg, rb_cArray) == Qfalse) rb_raise (ePropError, "hash value is not an array"); @@ -542,12 +543,13 @@ for_each_prop (VALUE tag, VALUE arg, VALUE stream) return ST_CONTINUE; type = rb_ary_entry (arg, 1); - chunks = rb_funcall (value, id_to_eet_chunks, 2, tag, type); + tmp = rb_funcall (value, id_to_eet_chunks, 2, tag, type); - len = RARRAY (chunks)->len; + Check_Type (tmp, T_ARRAY); + chunks = RARRAY (tmp); - for (i = 0; i < len; i++) - rb_funcall (stream, id_push, 1, rb_ary_entry (chunks, i)); + for (i = 0; i < chunks->len; i++) + rb_ary_push (stream, chunks->ptr[i]); return ST_CONTINUE; } @@ -697,7 +699,6 @@ Init_eet_ext () id_include = rb_intern ("include?"); id_serialize = rb_intern ("serialize"); - id_push = rb_intern ("push"); id_keys = rb_intern ("keys"); id_to_eet_chunks = rb_intern ("to_eet_chunks"); id_to_eet_name = rb_intern ("to_eet_name");