From: Michal Rokos Date: 2002-08-22T22:36:52+09:00 Subject: [Cleanup] Int vs Long (2nd part) Hi, I just noticed that I forgot to change 1 int to long in array.c:1627. Sorry. Michal (Or consider to use this: Index: array.c =================================================================== RCS file: /src/ruby/array.c,v retrieving revision 1.90 diff -u -r1.90 array.c --- array.c 2002/08/21 15:47:54 1.90 +++ array.c 2002/08/22 12:52:01 @@ -1448,8 +1448,7 @@ static VALUE rb_ary_times(ary, times) - VALUE ary; - VALUE times; + VALUE ary, times; { VALUE ary2; long i, len; @@ -1464,12 +1463,12 @@ } len *= RARRAY(ary)->len; - ary2 = ary_new(rb_obj_class(ary), len); - RARRAY(ary2)->len = len; + ary2 = rb_ary_new2(len); for (i=0; ilen) { MEMCPY(RARRAY(ary2)->ptr+i, RARRAY(ary)->ptr, VALUE, RARRAY(ary)->len); } + RARRAY(ary2)->len = len; OBJ_INFECT(ary2, ary); return ary2; @@ -1496,8 +1495,7 @@ VALUE rb_ary_rassoc(ary, value) - VALUE ary; - VALUE value; + VALUE ary, value; { VALUE *p, *pend; @@ -1549,9 +1547,8 @@ rb_ary_hash(ary) VALUE ary; { - long i; + long i, h; VALUE n; - long h; h = RARRAY(ary)->len; for (i=0; ilen; i++) { @@ -1568,6 +1565,7 @@ VALUE item; { long i; + for (i=0; ilen; i++) { if (rb_equal(RARRAY(ary)->ptr[i], item)) { return Qtrue; @@ -1577,26 +1575,23 @@ } VALUE -rb_ary_cmp(ary, ary2) - VALUE ary; - VALUE ary2; +rb_ary_cmp(ary1, ary2) + VALUE ary1, ary2; { long i, len; - if (TYPE(ary2) != T_ARRAY) { - ary2 = to_ary(ary2); - } - len = RARRAY(ary)->len; + ary2 = to_ary(ary2); + len = RARRAY(ary1)->len; if (len > RARRAY(ary2)->len) { len = RARRAY(ary2)->len; } for (i=0; iptr[i],id_cmp,1,RARRAY(ary2)->ptr[i]); + VALUE v = rb_funcall(RARRAY(ary1)->ptr[i], id_cmp, 1, RARRAY(ary2)->ptr[i]); if (v != INT2FIX(0)) { return v; } } - len = RARRAY(ary)->len - RARRAY(ary2)->len; + len = RARRAY(ary1)->len - RARRAY(ary2)->len; if (len == 0) return INT2FIX(0); if (len > 0) return INT2FIX(1); return INT2FIX(-1); @@ -1624,7 +1619,7 @@ VALUE ary1, ary2; { VALUE hash = rb_hash_new(); - int i; + long i; for (i=0; ilen; i++) { rb_hash_aset(hash, RARRAY(ary1)->ptr[i], Qtrue); @@ -1641,11 +1636,12 @@ rb_ary_and(ary1, ary2) VALUE ary1, ary2; { - VALUE hash; - VALUE ary3 = rb_ary_new(); + VALUE hash, ary3; long i; ary2 = to_ary(ary2); + ary3 = rb_ary_new(RARRAY(ary1)->len < RARRAY(ary2)->len ? + RARRAY(ary1)->len : RARRAY(ary2)->len); hash = ary_make_hash(ary2, 0); for (i=0; ilen; i++) { @@ -1662,12 +1658,12 @@ rb_ary_or(ary1, ary2) VALUE ary1, ary2; { - VALUE hash; - VALUE ary3 = rb_ary_new(); + VALUE hash, ary3; VALUE v; long i; ary2 = to_ary(ary2); + ary3 = rb_ary_new2(RARRAY(ary1)->len+RARRAY(ary2)->len); hash = ary_make_hash(ary1, ary2); for (i=0; ilen; i++) { @@ -1682,7 +1678,6 @@ rb_ary_push(ary3, RARRAY(ary2)->ptr[i]); } } - return ary3; } @@ -1690,14 +1685,16 @@ rb_ary_uniq_bang(ary) VALUE ary; { - VALUE hash = ary_make_hash(ary, 0); + VALUE hash; VALUE *p, *q, *end; + rb_ary_modify(ary); + + hash = ary_make_hash(ary, 0); + if (RARRAY(ary)->len == RHASH(hash)->tbl->num_entries) { return Qnil; } - - rb_ary_modify(ary); p = q = RARRAY(ary)->ptr; end = p + RARRAY(ary)->len; while (p < end) { -- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Michal Rokos Czech Technical University, Prague E-mail:m.rokos@sh.cvut.cz ICQ:36118339 Jabber:majkl@jabber.cz -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-