From deb555911974965cf23a4bcfdf79fb3b7d327663 Mon Sep 17 00:00:00 2001 From: Tilman Sauerbeck Date: Wed, 8 Jun 2005 16:18:32 +0000 Subject: [PATCH] Re-implemented Integer#to_eet_chunks in C. --- ChangeLog | 4 +++- ext/ext.c | 33 +++++++++++++++++++++++++++++++-- lib/eet.rb | 16 +--------------- 3 files changed, 35 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index 949b9fa..ec4033f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,11 +1,13 @@ -- -$Id: ChangeLog 59 2005-06-08 16:13:15Z tilman $ +$Id: ChangeLog 60 2005-06-08 16:18:32Z tilman $ ++ 2005-06-08 Tilman Sauerbeck (tilman at code-monkey de) * ext/ext.c, lib/eet.rb, test/test_basic.rb: Re-implemented Float#to_eet_chunks in C and switched format to the one libeet uses. + * ext/ext.c, lib/eet.rb: Re-implemented Integer#to_eet_chunks + in C 2005-06-02 Tilman Sauerbeck (tilman at code-monkey de) * Released version 0.1.3 diff --git a/ext/ext.c b/ext/ext.c index 465099f..c4082dc 100644 --- a/ext/ext.c +++ b/ext/ext.c @@ -1,5 +1,5 @@ /* - * $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) * @@ -48,7 +48,8 @@ static VALUE c_close (VALUE self); 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; @@ -595,6 +596,30 @@ c_to_eet (VALUE self) 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) { @@ -656,6 +681,7 @@ Init_eet_ext () 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); @@ -674,5 +700,8 @@ Init_eet_ext () 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")); } diff --git a/lib/eet.rb b/lib/eet.rb index a7586b8..95e1e46 100644 --- a/lib/eet.rb +++ b/lib/eet.rb @@ -1,5 +1,5 @@ #-- -# $Id: eet.rb 59 2005-06-08 16:13:15Z tilman $ +# $Id: eet.rb 60 2005-06-08 16:18:32Z tilman $ # # Copyright (c) 2005 Tilman Sauerbeck (tilman at code-monkey de) # @@ -56,20 +56,6 @@ class Object end end -class Integer # :nodoc: - def to_eet_chunks(tag, type = nil) - fmt = case type - when :char: "c" - when :short: "v" - when :long_long: "q" - else "V" - end - - data = [self].pack(fmt) - [Eet::Chunk.new(tag, data)] - end -end - class String # :nodoc: def to_eet_chunks(tag, type = nil) [Eet::Chunk.new(tag, self + "\0")] -- 2.30.2