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

ruby-changes:10175

From: matz <ko1@a...>
Date: Thu, 22 Jan 2009 00:27:50 +0900 (JST)
Subject: [ruby-changes:10175] Ruby:r21719 (trunk): * array.c (ary_double_capa): a new function to expand array more

matz	2009-01-22 00:27:35 +0900 (Thu, 22 Jan 2009)

  New Revision: 21719

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

  Log:
    * array.c (ary_double_capa): a new function to expand array more
      aggressively.   [ruby-core:21460]
    * array.c (rb_ary_store): use ary_double_capa().
    
    * array.c (rb_ary_unshift_m): ditto.
    
    * array.c (rb_ary_splice): ditto.

  Modified files:
    trunk/ChangeLog
    trunk/array.c

Index: array.c
===================================================================
--- array.c	(revision 21718)
+++ array.c	(revision 21719)
@@ -173,6 +173,21 @@
 }
 
 static void
+ary_double_capa(VALUE ary, long min)
+{
+    long new_capa = ARY_CAPA(ary) / 2;
+
+    if (new_capa < ARY_DEFAULT_SIZE) {
+	new_capa = ARY_DEFAULT_SIZE;
+    }
+    if (new_capa >= ARY_MAX_SIZE - min) {
+	new_capa = (ARY_MAX_SIZE - min) / 2;
+    }
+    new_capa += min;
+    ary_resize_capa(ary, new_capa);
+}
+
+static void
 rb_ary_decrement_share(VALUE shared)
 {
     if (shared) {
@@ -580,16 +595,7 @@
 
     rb_ary_modify(ary);
     if (idx >= ARY_CAPA(ary)) {
-	long new_capa = ARY_CAPA(ary) / 2;
-
-	if (new_capa < ARY_DEFAULT_SIZE) {
-	    new_capa = ARY_DEFAULT_SIZE;
-	}
-	if (new_capa >= ARY_MAX_SIZE - idx) {
-	    new_capa = (ARY_MAX_SIZE - idx) / 2;
-	}
-	new_capa += idx;
-	ary_resize_capa(ary, new_capa);
+	ary_double_capa(ary, idx);
     }
     if (idx > RARRAY_LEN(ary)) {
 	rb_mem_clear(RARRAY_PTR(ary) + RARRAY_LEN(ary),
@@ -839,7 +845,7 @@
     if (argc == 0) return ary;
     rb_ary_modify(ary);
     if (ARY_CAPA(ary) <= (len = RARRAY_LEN(ary)) + argc) {
-	ary_resize_capa(ary, len + argc + ARY_DEFAULT_SIZE);
+	ary_double_capa(ary, len + argc);
     }
 
     /* sliding items */
@@ -1203,7 +1209,7 @@
 	}
 	len = beg + rlen;
 	if (len >= ARY_CAPA(ary)) {
-	    ary_resize_capa(ary, len);
+	    ary_double_capa(ary, len);
 	}
 	rb_mem_clear(RARRAY_PTR(ary) + RARRAY_LEN(ary), beg - RARRAY_LEN(ary));
 	if (rlen > 0) {
@@ -1216,7 +1222,7 @@
 
 	alen = RARRAY_LEN(ary) + rlen - len;
 	if (alen >= ARY_CAPA(ary)) {
-	    ary_resize_capa(ary, alen);
+	    ary_double_capa(ary, alen);
 	}
 
 	if (len != rlen) {
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 21718)
+++ ChangeLog	(revision 21719)
@@ -6,6 +6,17 @@
 	* ruby.c (load_file_internal): rests EOF flag to make possible to
 	  load from stdin after reading data.
 
+Wed Jan 21 17:17:18 2009  Yukihiro Matsumoto  <matz@r...>
+
+	* array.c (ary_double_capa): a new function to expand array more
+	  aggressively.   [ruby-core:21460]
+
+	* array.c (rb_ary_store): use ary_double_capa().
+
+	* array.c (rb_ary_unshift_m): ditto.
+
+	* array.c (rb_ary_splice): ditto.
+
 Wed Jan 21 15:32:15 2009  Nobuyoshi Nakada  <nobu@r...>
 
 	* io.c (rb_io_ungetbyte, rb_io_ungetc): clears EOF flag.

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

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