From: Sean Chittenden Date: 2002-04-24T14:24:44+09:00 Subject: Numberic#prev --W/nzBZO5zC0uMSeA Content-Type: text/plain; charset=us-ascii Content-Disposition: inline I do a lot of incrementing and decrementing of values: it'd be nice if Numeric#succ had a counter part. The attached patch provides Numeric#prev which is faster in tight loops than (one less object): i = 10 p i.prev -sc PS Let me know if anyone has any interest in an inline increment/decrement library. i = 1 i.incr p i >> 2 i.decr p i >> 1 -- Sean Chittenden --W/nzBZO5zC0uMSeA Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=patch Index: numeric.c =================================================================== RCS file: /src/ruby/numeric.c,v retrieving revision 1.44 diff -u -r1.44 numeric.c --- numeric.c 2002/04/24 05:08:04 1.44 +++ numeric.c 2002/04/24 05:20:55 @@ -1024,6 +1024,17 @@ } static VALUE +int_prev(num) + VALUE num; +{ + if (FIXNUM_P(num)) { + long i = FIX2LONG(num) - 1; + return rb_int2inum(i); + } + return rb_funcall(num, '-', 1, INT2FIX(1)); +} + +static VALUE int_chr(num) VALUE num; { @@ -1652,6 +1663,7 @@ rb_include_module(rb_cInteger, rb_mPrecision); rb_define_method(rb_cInteger, "succ", int_succ, 0); rb_define_method(rb_cInteger, "next", int_succ, 0); + rb_define_method(rb_cInteger, "prev", int_prev, 0); rb_define_method(rb_cInteger, "chr", int_chr, 0); rb_define_method(rb_cInteger, "to_i", int_to_i, 0); rb_define_method(rb_cInteger, "to_int", int_to_i, 0); --W/nzBZO5zC0uMSeA--