mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
mruby-range-ext: implement __empty_range? in C
This commit is contained in:
@@ -121,11 +121,4 @@ class Range
|
||||
|
||||
true
|
||||
end
|
||||
|
||||
def __empty_range?(b, e, excl)
|
||||
return false if b.nil? || e.nil?
|
||||
|
||||
comp = b <=> e
|
||||
comp.nil? || comp > 0 || (comp == 0 && excl)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -189,6 +189,20 @@ range_size(mrb_state *mrb, mrb_value range)
|
||||
}
|
||||
#endif /* MRB_NO_FLOAT */
|
||||
|
||||
static mrb_value
|
||||
range_empty_p(mrb_state *mrb, mrb_value range)
|
||||
{
|
||||
mrb_value b, e;
|
||||
mrb_bool excl;
|
||||
|
||||
mrb_get_args(mrb, "oob", &b, &e, &excl);
|
||||
if (mrb_nil_p(b) || mrb_nil_p(e))
|
||||
return mrb_false_value();
|
||||
|
||||
mrb_int comp = mrb_cmp(mrb, b, e);
|
||||
return mrb_bool_value(comp == -2 || comp > 0 || (comp == 0 && excl));
|
||||
}
|
||||
|
||||
void
|
||||
mrb_mruby_range_ext_gem_init(mrb_state* mrb)
|
||||
{
|
||||
@@ -196,6 +210,7 @@ mrb_mruby_range_ext_gem_init(mrb_state* mrb)
|
||||
|
||||
mrb_define_method(mrb, s, "cover?", range_cover, MRB_ARGS_REQ(1));
|
||||
mrb_define_method(mrb, s, "size", range_size, MRB_ARGS_NONE());
|
||||
mrb_define_method(mrb, s, "__empty_range?", range_empty_p, MRB_ARGS_REQ(3));
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
Reference in New Issue
Block a user