Revision: 130 http://trac.macosforge.org/projects/ruby/changeset/130 Author: lsansonetti@apple.com Date: 2008-04-04 13:59:58 -0700 (Fri, 04 Apr 2008) Log Message: ----------- faster Array#index Modified Paths: -------------- MacRuby/trunk/array.c Modified: MacRuby/trunk/array.c =================================================================== --- MacRuby/trunk/array.c 2008-04-02 00:47:10 UTC (rev 129) +++ MacRuby/trunk/array.c 2008-04-04 20:59:58 UTC (rev 130) @@ -1184,21 +1184,30 @@ rb_ary_index(int argc, VALUE *argv, VALUE ary) { VALUE val; - long i; + long n, i; + n = RARRAY_LEN(ary); if (rb_scan_args(argc, argv, "01", &val) == 0) { RETURN_ENUMERATOR(ary, 0, 0); - for (i=0; i<RARRAY_LEN(ary); i++) { + for (i=0; i<n; i++) { if (RTEST(rb_yield(RARRAY_AT(ary, i)))) { return LONG2NUM(i); } } } else { - for (i=0; i<RARRAY_LEN(ary); i++) { +#if WITH_OBJC + CFIndex idx; + idx = CFArrayGetFirstIndexOfValue((CFArrayRef)ary, CFRangeMake(0, n), + (const void *)val); + if (idx != -1) + return LONG2NUM(idx); +#else + for (i=0; i<n; i++) { if (rb_equal(RARRAY_AT(ary, i), val)) return LONG2NUM(i); } +#endif } return Qnil; }