mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* array.c (rb_ary_times): less MEMCPY calls.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30583 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
099f52d73d
commit
355c3a250d
2 changed files with 14 additions and 3 deletions
|
@ -1,3 +1,7 @@
|
|||
Mon Jan 17 23:36:33 2011 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* array.c (rb_ary_times): less MEMCPY calls.
|
||||
|
||||
Mon Jan 17 22:54:33 2011 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* debug.h: parenthesize macro arguments.
|
||||
|
|
13
array.c
13
array.c
|
@ -2988,7 +2988,7 @@ static VALUE
|
|||
rb_ary_times(VALUE ary, VALUE times)
|
||||
{
|
||||
VALUE ary2, tmp, *ptr, *ptr2;
|
||||
long i, t, len;
|
||||
long t, len;
|
||||
|
||||
tmp = rb_check_string_type(times);
|
||||
if (!NIL_P(tmp)) {
|
||||
|
@ -3014,8 +3014,15 @@ rb_ary_times(VALUE ary, VALUE times)
|
|||
ptr = RARRAY_PTR(ary);
|
||||
ptr2 = RARRAY_PTR(ary2);
|
||||
t = RARRAY_LEN(ary);
|
||||
for (i=0; i<len; i+=t) {
|
||||
MEMCPY(ptr2+i, ptr, VALUE, t);
|
||||
if (0 < t) {
|
||||
MEMCPY(ptr2, ptr, VALUE, t);
|
||||
while (t <= len/2) {
|
||||
MEMCPY(ptr2+t, ptr2, VALUE, t);
|
||||
t *= 2;
|
||||
}
|
||||
if (t < len) {
|
||||
MEMCPY(ptr2+t, ptr2, VALUE, len-t);
|
||||
}
|
||||
}
|
||||
out:
|
||||
OBJ_INFECT(ary2, ary);
|
||||
|
|
Loading…
Reference in a new issue