--
-$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)
* 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:
/*
- * $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)
*
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;
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");
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;
}
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");