ruby-changes:2620
From: ko1@a...
Date: 5 Dec 2007 18:13:15 +0900
Subject: [ruby-changes:2620] akr - Ruby:r14111 (ruby_1_8): * numeric.c (int_odd_p): new method Integer#odd?.
akr 2007-12-05 18:12:58 +0900 (Wed, 05 Dec 2007) New Revision: 14111 Modified files: branches/ruby_1_8/ChangeLog branches/ruby_1_8/numeric.c Log: * numeric.c (int_odd_p): new method Integer#odd?. (int_even_p): new method Integer#even?. (int_pred): new method Integer#pred. (fix_odd_p): new method Fixnum#odd?. (fix_even_p): new method Fixnum#even?. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/ChangeLog?r1=14111&r2=14110 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/numeric.c?r1=14111&r2=14110 Index: ruby_1_8/numeric.c =================================================================== --- ruby_1_8/numeric.c (revision 14110) +++ ruby_1_8/numeric.c (revision 14111) @@ -1786,6 +1786,39 @@ /* * call-seq: + * int.odd? -> true or false + * + * Returns <code>true</code> if <i>int</i> is an odd number. + */ + +static VALUE +int_odd_p(VALUE num) +{ + if (rb_funcall(num, '%', 1, INT2FIX(2)) != INT2FIX(0)) { + return Qtrue; + } + return Qfalse; +} + +/* + * call-seq: + * int.even? -> true or false + * + * Returns <code>true</code> if <i>int</i> is an even number. + */ + +static VALUE +int_even_p(VALUE num) +{ + if (rb_funcall(num, '%', 1, INT2FIX(2)) == INT2FIX(0)) { + return Qtrue; + } + return Qfalse; +} + + +/* + * call-seq: * int.next => integer * int.succ => integer * @@ -1808,6 +1841,26 @@ /* * call-seq: + * int.pred => integer + * + * Returns the <code>Integer</code> equal to <i>int</i> - 1. + * + * 1.pred #=> 0 + * (-1).pred #=> -2 + */ + +static VALUE +int_pred(VALUE num) +{ + if (FIXNUM_P(num)) { + long i = FIX2LONG(num) - 1; + return LONG2NUM(i); + } + return rb_funcall(num, '-', 1, INT2FIX(1)); +} + +/* + * call-seq: * int.chr => string * * Returns a string containing the ASCII character represented by the @@ -2262,15 +2315,6 @@ return LONG2NUM(z); } -static VALUE -int_even_p(VALUE num) -{ - if (rb_funcall(num, '%', 1, INT2FIX(2)) == INT2FIX(0)) { - return Qtrue; - } - return Qfalse; -} - /* * call-seq: * fix ** other => Numeric @@ -2907,6 +2951,38 @@ return Qfalse; } +/* + * call-seq: + * fix.odd? -> true or false + * + * Returns <code>true</code> if <i>fix</i> is an odd number. + */ + +static VALUE +fix_odd_p(VALUE num) +{ + if (num & 2) { + return Qtrue; + } + return Qfalse; +} + +/* + * call-seq: + * fix.even? -> true or false + * + * Returns <code>true</code> if <i>fix</i> is an even number. + */ + +static VALUE +fix_even_p(VALUE num) +{ + if (num & 2) { + return Qfalse; + } + return Qtrue; +} + void Init_Numeric() { @@ -2961,12 +3037,15 @@ rb_undef_method(CLASS_OF(rb_cInteger), "new"); rb_define_method(rb_cInteger, "integer?", int_int_p, 0); + rb_define_method(rb_cInteger, "odd?", int_odd_p, 0); + rb_define_method(rb_cInteger, "even?", int_even_p, 0); rb_define_method(rb_cInteger, "upto", int_upto, 1); rb_define_method(rb_cInteger, "downto", int_downto, 1); rb_define_method(rb_cInteger, "times", int_dotimes, 0); 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, "pred", int_pred, 0); rb_define_method(rb_cInteger, "chr", int_chr, 0); rb_define_method(rb_cInteger, "ord", int_ord, 0); rb_define_method(rb_cInteger, "to_i", int_to_i, 0); @@ -3020,6 +3099,8 @@ rb_define_method(rb_cFixnum, "to_f", fix_to_f, 0); rb_define_method(rb_cFixnum, "size", fix_size, 0); rb_define_method(rb_cFixnum, "zero?", fix_zero_p, 0); + rb_define_method(rb_cFixnum, "odd?", fix_odd_p, 0); + rb_define_method(rb_cFixnum, "even?", fix_even_p, 0); rb_cFloat = rb_define_class("Float", rb_cNumeric); Index: ruby_1_8/ChangeLog =================================================================== --- ruby_1_8/ChangeLog (revision 14110) +++ ruby_1_8/ChangeLog (revision 14111) @@ -1,3 +1,11 @@ +Wed Dec 5 18:08:45 2007 Tanaka Akira <akr@f...> + + * numeric.c (int_odd_p): new method Integer#odd?. + (int_even_p): new method Integer#even?. + (int_pred): new method Integer#pred. + (fix_odd_p): new method Fixnum#odd?. + (fix_even_p): new method Fixnum#even?. + Wed Dec 5 15:15:21 2007 Nobuyoshi Nakada <nobu@r...> * range.c (step_i, range_step): support non-fixnum steps. -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml