[#21736] OBJECTDAY 2000 — 助田 雅紀 <masaki.suketa@...>

助田です.

29 messages 2000/04/03
[#21748] Re: OBJECTDAY 2000 — keiju@... (石塚圭樹) 2000/04/04

けいじゅ@日本ラショナルソフトウェアです.

[#21753] Re: OBJECTDAY 2000 — Hideto ISHIBASHI <hideto-i@...4u.or.jp> 2000/04/05

石橋秀仁です。

[#21755] Re: OBJECTDAY 2000 — keiju@... (石塚圭樹) 2000/04/05

けいじゅ@日本ラショナルソフトウェアです.

[#21837] site_ruby & Linux distribution — OZAWA Sakuro <crouton@...>

小澤さくです。

14 messages 2000/04/10

[#21922] ruby-1.4.4 binary for BeOS 5 (Intel) — tenmei@... (Noriaki Harada)

はらだです。

23 messages 2000/04/15
[#21923] Re: ruby-1.4.4 binary for BeOS 5 (Intel) — NAITOH Jun <naitoh@...> 2000/04/15

はじめまして、内藤と申します。

[#21926] Re: ruby-1.4.4 binary for BeOS 5 (Intel) — tenmei@... (Noriaki Harada) 2000/04/16

>はじめまして、内藤と申します。

[#21930] Re: ruby-1.4.4 binary for BeOS 5 (Intel) — NAITOH Jun <naitoh@...> 2000/04/16

内藤です。

[#21968] Re: ruby-1.4.4 binary for BeOS 5 (Intel) — Katsuyuki Komatsu <komatsu@...> 2000/04/17

小松です。

[#21969] Re: ruby-1.4.4 binary for BeOS 5 (Intel) — NAITOH Jun <naitoh@...> 2000/04/17

再び内藤です。

[#21956] Thread & STDIN — Masato Toyoshima <mt@...>

はじめまして、豊島といいます。

16 messages 2000/04/17

[#21981] rd2man — WATANABE Hirofumi <eban@...>

わたなべです.

29 messages 2000/04/18
[#21982] Re: rd2man — Toshiro Kuwabara <toshirok@...3.so-net.ne.jp> 2000/04/18

Toshです。

[#21985] Re: rd2man — WATANABE Hirofumi <Hirofumi.Watanabe@...> 2000/04/19

わたなべです.

[#22036] Re: rd2man — Wakou Aoyama <wakou@...> 2000/04/20

青山です。

[#22040] Re: rd2man — Toshiro Kuwabara <toshirok@...3.so-net.ne.jp> 2000/04/21

Toshです。

[#22014] shell interactive — WATANABE Daisaku <dwata@...3.rim.or.jp>

31 messages 2000/04/20
[#22016] Re: shell interactive — 時田幸粋 <ktokita@...> 2000/04/20

こんにちは、時田です。

[#22017] Re: shell interactive — nobu.nakada@... 2000/04/20

なかだです。

[#22018] Re: shell interactive — WATANABE Hirofumi <Hirofumi.Watanabe@...> 2000/04/20

わたなべです.

[#22027] Re: shell interactive — 時田幸粋 <ktokita@...> 2000/04/20

こんにちは、時田です。

[#22103] Please put ruby-1.4.4.tar.gz in pub/lang/ruby/1.4/ — "Akinori -Aki- MUSHA" <knu@...>

 お願いがあるのですが、 ruby-1.4.4.tar.gz を FTP ツリーの 1.4/

16 messages 2000/04/25
[#22199] Where to put ruby-i.j.k.tar.gz on? (Re: ) — SUGIHARA Hiroshi <maili31s@...> 2000/04/28

[ruby-list:22103]におきまして、2000/04/25 12:38ほどに、

[#22117] StateGraph: state machine interpreter — Hideto ISHIBASHI <hideto-i@...4u.or.jp>

石橋 "rubyholic" 秀仁です。

16 messages 2000/04/25

[#22159] $LOAD_PATH への追加について — "Sugawara Hajime" <sugawara@...>

 はじめまして、菅原@ホビー・データです。

13 messages 2000/04/27

[#22181] Can't Use optparse — Yamada Kenji <kyamada@...>

28 messages 2000/04/28
[#22186] Re: Can't Use optparse — akira yamada / やまだあきら <akira@...> 2000/04/28

[#22195] Re: Can't Use optparse — Toshiro Kuwabara <toshirok@...3.so-net.ne.jp> 2000/04/28

Toshです。

[#22261] Re: Can't Use optparse — nobu.nakada@... 2000/05/04

なかだです。

[#22264] Re: Can't Use optparse — Toshiro Kuwabara <toshirok@...3.so-net.ne.jp> 2000/05/04

Toshです。

[#22270] Re: Can't Use optparse — nobu.nakada@... 2000/05/04

なかだです。

[#22272] Re: Can't Use optparse — Toshiro Kuwabara <toshirok@...3.so-net.ne.jp> 2000/05/04

Toshです。

[#22300] Re: Can't Use optparse — Koji Arai <JCA02266@...> 2000/05/05

新井です。

[ruby-list:22202] Re: $LOAD_PATH への追加について

From: nobu.nakada@...
Date: 2000-04-29 05:00:25 UTC
List: ruby-list #22202
なかだです。

At Fri, 28 Apr 2000 13:57:49 +0900,
matz@netlab.co.jp (Yukihiro Matsumoto) wrote:
> |  Array#unshift は引数は1個です。Array#push はいくつでもいいのに。:-P
> 
> そうですね。パッチも頂いたことだし、1.5.xでは複数にしましょ
> うか。

  あれだと一つずつ MEMMOVE() していくことになって、効率が少々気
になるので、一気に持ってくようにしてみました。ついでに push と
concat の方も、大量にやったときに RALLOC() の回数が減るかもとい
うことで。なんとなくシンメトリカル。


Index: array.c
===================================================================
RCS file: /home/cvs/ruby/array.c,v
retrieving revision 1.17
diff -u -2 -p -r1.17 array.c
--- array.c	2000/04/10 05:44:05	1.17
+++ array.c	2000/04/29 04:58:12
@@ -277,6 +277,13 @@ rb_ary_push_m(argc, argv, ary)
     VALUE ary;
 {
-    while (argc--) {
-	rb_ary_store(ary, RARRAY(ary)->len, *argv++);
+    if (argc > 0) {
+	long len = RARRAY(ary)->len;
+
+	--argc;
+	/* make rooms by copying the last item */
+	rb_ary_store(ary, len + argc, argv[argc]);
+
+	if (argc)		/* if any rest */
+	    MEMCPY(RARRAY(ary)->ptr + len, argv, VALUE, argc);
     }
     return ary;
@@ -341,4 +348,24 @@ rb_ary_unshift(ary, item)
 }
 
+static VALUE
+rb_ary_unshift_m(argc, argv, ary)
+    int argc;
+    VALUE *argv;
+    VALUE ary;
+{
+    if (argc > 0) {
+	long len = RARRAY(ary)->len;
+
+	/* make rooms by setting the last item */
+	rb_ary_store(ary, len + argc - 1, Qnil);
+
+	/* sliding items */
+	MEMMOVE(RARRAY(ary)->ptr + argc, RARRAY(ary)->ptr, VALUE, len);
+
+	MEMCPY(RARRAY(ary)->ptr, argv, VALUE, argc);
+    }
+    return ary;
+}
+
 VALUE
 rb_ary_entry(ary, offset)
@@ -1196,15 +1223,7 @@ rb_ary_concat(x, y)
     VALUE x, y;
 {
-    VALUE *p, *pend;
-
-    rb_ary_modify(x);
     Check_Type(y, T_ARRAY);
 
-    p = RARRAY(y)->ptr;
-    pend = p + RARRAY(y)->len;
-    while (p < pend) {
-	rb_ary_store(x, RARRAY(x)->len, *p);
-	p++;
-    }
+    rb_ary_push_m(RARRAY(y)->len, RARRAY(y)->ptr, x);
     return x;
 }
@@ -1576,5 +1595,5 @@ Init_Array()
     rb_define_method(rb_cArray, "pop", rb_ary_pop, 0);
     rb_define_method(rb_cArray, "shift", rb_ary_shift, 0);
-    rb_define_method(rb_cArray, "unshift", rb_ary_unshift, 1);
+    rb_define_method(rb_cArray, "unshift", rb_ary_unshift_m, -1);
     rb_define_method(rb_cArray, "each", rb_ary_each, 0);
     rb_define_method(rb_cArray, "each_index", rb_ary_each_index, 0);

Sat Apr 29 13:38:00 2000  Nobuyoshi Nakada  <nobu.nakada@nifty.ne.jp>

	* array.c (rb_ary_push_m): making rooms by rb_ary_store() once and
	  copys with MEMCOPY().

	* array.c (rb_ary_unshift_m): newly added to allow multiple items.

	* array.c (rb_ary_concat): equivalents to `push(*ary)'.

	* array.c (Init_Array): changed Array#unshift implementation to
	  allow multiple items.



-- 
そうだ 強気に ちょっと インチキに☆彡
    中田 "Bugるくらいがちょうどいいかも;-)" 伸悦

In This Thread

Prev Next