[前][次][番号順一覧][スレッド一覧]

ruby-changes:9011

From: tadf <ko1@a...>
Date: Fri, 5 Dec 2008 21:47:24 +0900 (JST)
Subject: [ruby-changes:9011] Ruby:r20547 (trunk): * rational.c (nurat_{to_s,inspect}): performance improvement.

tadf	2008-12-05 21:47:07 +0900 (Fri, 05 Dec 2008)

  New Revision: 20547

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=20547

  Log:
    * rational.c (nurat_{to_s,inspect}): performance improvement.

  Modified files:
    trunk/ChangeLog
    trunk/rational.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 20546)
+++ ChangeLog	(revision 20547)
@@ -1,3 +1,7 @@
+Fri Dec  5 21:45:45 2008  Tadayoshi Funaba  <tadf@d...>
+
+	* rational.c (nurat_{to_s,inspect}): performance improvement.
+
 Fri Dec  5 21:42:44 2008  Tadayoshi Funaba  <tadf@d...>
 
 	* complex.c: inpsect should not depend on to_s.
Index: rational.c
===================================================================
--- rational.c	(revision 20546)
+++ rational.c	(revision 20547)
@@ -27,8 +27,8 @@
 VALUE rb_cRational;
 
 static ID id_abs, id_cmp, id_convert, id_equal_p, id_expt, id_floor,
-    id_format, id_hash, id_idiv, id_inspect, id_integer_p, id_negate,
-    id_to_f, id_to_i, id_to_s, id_truncate;
+    id_hash, id_idiv, id_inspect, id_integer_p, id_negate, id_to_f,
+    id_to_i, id_to_s, id_truncate;
 
 #define f_boolcast(x) ((x) ? Qtrue : Qfalse)
 
@@ -1111,19 +1111,34 @@
 }
 
 static VALUE
-nurat_to_s(VALUE self)
+nurat_format(VALUE self, VALUE (*func)(VALUE))
 {
+    VALUE s;
     get_dat1(self);
-    return rb_funcall(rb_mKernel, id_format, 3,
-		      rb_str_new2("%d/%d"), dat->num, dat->den);
+
+    s = (*func)(dat->num);
+    rb_str_cat2(s, "/");
+    rb_str_concat(s, (*func)(dat->den));
+
+    return s;
 }
 
 static VALUE
+nurat_to_s(VALUE self)
+{
+    return nurat_format(self, f_to_s);
+}
+
+static VALUE
 nurat_inspect(VALUE self)
 {
-    get_dat1(self);
-    return rb_funcall(rb_mKernel, id_format, 3,
-		      rb_str_new2("(%d/%d)"), dat->num, dat->den);
+    VALUE s;
+
+    s = rb_str_new2("(");
+    rb_str_concat(s, nurat_format(self, f_inspect));
+    rb_str_cat2(s, ")");
+
+    return s;
 }
 
 static VALUE
@@ -1484,7 +1499,6 @@
     id_equal_p = rb_intern("==");
     id_expt = rb_intern("**");
     id_floor = rb_intern("floor");
-    id_format = rb_intern("format");
     id_hash = rb_intern("hash");
     id_idiv = rb_intern("div");
     id_inspect = rb_intern("inspect");

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]