/*
- * $Id: ext.c 59 2005-06-08 16:13:15Z tilman $
+ * $Id: ext.c 60 2005-06-08 16:18:32Z tilman $
*
* Copyright (c) 2005 Tilman Sauerbeck (tilman at code-monkey de)
*
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;
return rb_funcall (stream, 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);
+
+ 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
float_to_eet_chunks (int argc, VALUE *argv, VALUE self)
{
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);
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"));
}