projects
/
ruby-eet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Object#to_eet: don't put the final chunk in a stream again.
[ruby-eet.git]
/
ext
/
ext.c
diff --git
a/ext/ext.c
b/ext/ext.c
index 465099f801f49d8efe211365e0bf6eb744faf7af..22ccb19aef5582dbe94c7c5d2c38760ddf3ce0e8 100644
(file)
--- a/
ext/ext.c
+++ b/
ext/ext.c
@@
-1,5
+1,5
@@
/*
/*
- * $Id: ext.c
59 2005-06-08 16:13:15
Z tilman $
+ * $Id: ext.c
61 2005-06-09 17:33:48
Z tilman $
*
* Copyright (c) 2005 Tilman Sauerbeck (tilman at code-monkey de)
*
*
* Copyright (c) 2005 Tilman Sauerbeck (tilman at code-monkey de)
*
@@
-48,7
+48,8
@@
static VALUE c_close (VALUE self);
static VALUE cStream, cChunk,
eEetError, eNameError, ePropError,
static VALUE cStream, cChunk,
eEetError, eNameError, ePropError,
- sym_lossy, sym_level, sym_quality, sym_double;
+ 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,
id_to_eet_chunks, id_to_eet_name, id_to_eet_properties,
id_tag, id_data;
static ID id_include, id_serialize, id_push, id_keys,
id_to_eet_chunks, id_to_eet_name, id_to_eet_properties,
id_tag, id_data;
@@
-590,9
+591,31
@@
c_to_eet (VALUE self)
args[1] = rb_funcall (stream, id_serialize, 0);
chunk = rb_class_new_instance (2, args, cChunk);
args[1] = rb_funcall (stream, id_serialize, 0);
chunk = rb_class_new_instance (2, args, cChunk);
- stream = rb_class_new_instance (1, &chunk, cStream);
+ return rb_funcall (chunk, id_serialize, 0);
+}
+
+static VALUE
+int_to_eet_chunks (int argc, VALUE *argv, VALUE self)
+{
+ VALUE tag, type = Qnil, ary, args[2], chunk;
+ char *cfmt = "V";
+
+ rb_scan_args (argc, argv, "11", &tag, &type);
- return rb_funcall (stream, id_serialize, 0);
+ ary = rb_ary_new3 (1, self);
+
+ if (type == sym_char)
+ cfmt = "c";
+ else if (type == sym_short)
+ cfmt = "v";
+ else if (type == sym_long_long)
+ cfmt = "q";
+
+ args[0] = tag;
+ args[1] = rb_funcall (ary, rb_intern ("pack"), 1, rb_str_new2 (cfmt));
+ chunk = rb_class_new_instance (2, args, cChunk);
+
+ return rb_ary_new3 (1, chunk);
}
static VALUE
}
static VALUE
@@
-656,6
+679,7
@@
Init_eet_ext ()
rb_define_method (rb_cObject, "to_eet", c_to_eet, 0);
rb_define_method (rb_cObject, "to_eet", c_to_eet, 0);
+ rb_define_method (rb_cInteger, "to_eet_chunks", int_to_eet_chunks, -1);
rb_define_method (rb_cFloat, "to_eet_chunks", float_to_eet_chunks, -1);
eEetError = rb_define_class_under (m, "EetError", rb_eStandardError);
rb_define_method (rb_cFloat, "to_eet_chunks", float_to_eet_chunks, -1);
eEetError = rb_define_class_under (m, "EetError", rb_eStandardError);
@@
-674,5
+698,8
@@
Init_eet_ext ()
sym_lossy = ID2SYM (rb_intern ("lossy"));
sym_level = ID2SYM (rb_intern ("level"));
sym_quality = ID2SYM (rb_intern ("quality"));
sym_lossy = ID2SYM (rb_intern ("lossy"));
sym_level = ID2SYM (rb_intern ("level"));
sym_quality = ID2SYM (rb_intern ("quality"));
+ sym_char = ID2SYM (rb_intern ("char"));
+ sym_short = ID2SYM (rb_intern ("short"));
+ sym_long_long = ID2SYM (rb_intern ("long_long"));
sym_double = ID2SYM (rb_intern ("double"));
}
sym_double = ID2SYM (rb_intern ("double"));
}