diff options
| author | Yukihiro Matsumoto <[email protected]> | 2012-05-09 22:06:16 +0900 |
|---|---|---|
| committer | Yukihiro Matsumoto <[email protected]> | 2012-05-09 22:06:16 +0900 |
| commit | 6a0c30d038172a238eb22ef259d835123cb117c9 (patch) | |
| tree | d8a01678d651048ead9931d6d72be0f0c89465cd /src/compar.c | |
| parent | db96db6a8079f8e578acaa77890ddcb49de9fc7d (diff) | |
| download | mruby-6a0c30d038172a238eb22ef259d835123cb117c9.tar.gz mruby-6a0c30d038172a238eb22ef259d835123cb117c9.zip | |
move body of Comparison from compar.c to compar.rb
Diffstat (limited to 'src/compar.c')
| -rw-r--r-- | src/compar.c | 104 |
1 files changed, 1 insertions, 103 deletions
diff --git a/src/compar.c b/src/compar.c index bcd77867e..1502d450b 100644 --- a/src/compar.c +++ b/src/compar.c @@ -15,7 +15,6 @@ mrb_cmperr(mrb_state *mrb, mrb_value x, mrb_value y) if (SPECIAL_CONST_P(y)) { y = mrb_inspect(mrb, y); - //classname = StringValuePtr(y); classname = mrb_string_value_ptr(mrb, y); } else { @@ -42,109 +41,8 @@ mrb_cmpint(mrb_state *mrb, mrb_value val, mrb_value a, mrb_value b) return 0; } -static mrb_value -cmp_equal(mrb_state *mrb, mrb_value x) -{ - mrb_value y, c; - - /* *** TEMPORAL IMPLEMENT *** */ - - mrb_get_args(mrb, "o", &y); - if (mrb_obj_equal(mrb, x, y)) return mrb_true_value(); - - c = mrb_funcall(mrb, x, "<=>", 1, y); - - if (mrb_cmpint(mrb, c, x, y) == 0) return mrb_true_value(); - return mrb_false_value(); -} - -#include <stdio.h> -static mrb_value -cmp_gt(mrb_state *mrb, mrb_value x, mrb_value y) -{ - mrb_value c; - - c = mrb_funcall(mrb, x, "<=>", 1, y); - - if (mrb_cmpint(mrb, c, x, y) > 0) return mrb_true_value(); - return mrb_false_value(); -} - -static mrb_value -cmp_gt_m(mrb_state *mrb, mrb_value x) -{ - mrb_value y; - - mrb_get_args(mrb, "o", &y); - return cmp_gt(mrb, x, y); -} - -static mrb_value -cmp_ge_m(mrb_state *mrb, mrb_value x) -{ - mrb_value y, c; - - mrb_get_args(mrb, "o", &y); - c = mrb_funcall(mrb, x, "<=>", 1, y); - - if (mrb_cmpint(mrb, c, x, y) >= 0) return mrb_true_value(); - return mrb_false_value(); -} - -static mrb_value -cmp_lt(mrb_state *mrb, mrb_value x, mrb_value y) -{ - mrb_value c; - - c = mrb_funcall(mrb, x, "<=>", 1, y); - - if (mrb_cmpint(mrb, c, x, y) < 0) return mrb_true_value(); - return mrb_false_value(); -} - -static mrb_value -cmp_lt_m(mrb_state *mrb, mrb_value x) -{ - mrb_value y; - - mrb_get_args(mrb, "o", &y); - return cmp_lt(mrb, x, y); -} - -static mrb_value -cmp_le_m(mrb_state *mrb, mrb_value x) -{ - mrb_value y, c; - - mrb_get_args(mrb, "o", &y); - c = mrb_funcall(mrb, x, "<=>", 1, y); - - if (mrb_cmpint(mrb, c, x, y) <= 0) return mrb_true_value(); - return mrb_false_value(); -} - -static mrb_value -cmp_between(mrb_state *mrb, mrb_value x) -{ - mrb_value min, max; - - mrb_get_args(mrb, "oo", &min, &max); - - if (mrb_test(cmp_lt(mrb, x, min))) return mrb_false_value(); - if (mrb_test(cmp_gt(mrb, x, max))) return mrb_false_value(); - return mrb_true_value(); -} - void mrb_init_comparable(mrb_state *mrb) { - struct RClass *comp; - - comp = mrb_define_module(mrb, "Comparable"); - mrb_define_method(mrb, comp, "<", cmp_lt_m, ARGS_REQ(1)); /* 15.3.3.2.1 */ - mrb_define_method(mrb, comp, "<=", cmp_le_m, ARGS_REQ(1)); /* 15.3.3.2.2 */ - mrb_define_method(mrb, comp, "==", cmp_equal, ARGS_REQ(1)); /* 15.3.3.2.3 */ - mrb_define_method(mrb, comp, ">", cmp_gt_m, ARGS_REQ(1)); /* 15.3.3.2.4 */ - mrb_define_method(mrb, comp, ">=", cmp_ge_m, ARGS_REQ(1)); /* 15.3.3.2.5 */ - mrb_define_method(mrb, comp, "between?", cmp_between, ARGS_REQ(2)); /* 15.3.3.2.6 */ + mrb_define_module(mrb, "Comparable"); } |
