[270] | 1 | #include <limits.h>
|
---|
[331] | 2 | #include <mruby.h>
|
---|
[439] | 3 | #include <mruby/numeric.h>
|
---|
[270] | 4 |
|
---|
[439] | 5 | /*
|
---|
| 6 | * call-seq:
|
---|
| 7 | * int.allbits?(mask) -> true or false
|
---|
| 8 | *
|
---|
| 9 | * Returns +true+ if all bits of <code>+int+ & +mask+</code> are 1.
|
---|
| 10 | */
|
---|
[270] | 11 | static mrb_value
|
---|
[439] | 12 | mrb_int_allbits(mrb_state *mrb, mrb_value self)
|
---|
[270] | 13 | {
|
---|
[439] | 14 | mrb_int n, m;
|
---|
[270] | 15 |
|
---|
[439] | 16 | mrb_get_args(mrb, "i", &m);
|
---|
| 17 | n = mrb_int(mrb, self);
|
---|
| 18 | return mrb_bool_value((n & m) == m);
|
---|
| 19 | }
|
---|
[270] | 20 |
|
---|
[439] | 21 | /*
|
---|
| 22 | * call-seq:
|
---|
| 23 | * int.anybits?(mask) -> true or false
|
---|
| 24 | *
|
---|
| 25 | * Returns +true+ if any bits of <code>+int+ & +mask+</code> are 1.
|
---|
| 26 | */
|
---|
| 27 | static mrb_value
|
---|
| 28 | mrb_int_anybits(mrb_state *mrb, mrb_value self)
|
---|
| 29 | {
|
---|
| 30 | mrb_int n, m;
|
---|
| 31 |
|
---|
| 32 | mrb_get_args(mrb, "i", &m);
|
---|
| 33 | n = mrb_int(mrb, self);
|
---|
| 34 | return mrb_bool_value((n & m) != 0);
|
---|
[270] | 35 | }
|
---|
| 36 |
|
---|
[439] | 37 | /*
|
---|
| 38 | * call-seq:
|
---|
| 39 | * int.nobits?(mask) -> true or false
|
---|
| 40 | *
|
---|
| 41 | * Returns +true+ if no bits of <code>+int+ & +mask+</code> are 1.
|
---|
| 42 | */
|
---|
| 43 | static mrb_value
|
---|
| 44 | mrb_int_nobits(mrb_state *mrb, mrb_value self)
|
---|
| 45 | {
|
---|
| 46 | mrb_int n, m;
|
---|
| 47 |
|
---|
| 48 | mrb_get_args(mrb, "i", &m);
|
---|
| 49 | n = mrb_int(mrb, self);
|
---|
| 50 | return mrb_bool_value((n & m) == 0);
|
---|
| 51 | }
|
---|
| 52 |
|
---|
[270] | 53 | void
|
---|
| 54 | mrb_mruby_numeric_ext_gem_init(mrb_state* mrb)
|
---|
| 55 | {
|
---|
[439] | 56 | struct RClass *i = mrb_module_get(mrb, "Integral");
|
---|
[270] | 57 |
|
---|
[439] | 58 | mrb_define_method(mrb, i, "allbits?", mrb_int_allbits, MRB_ARGS_REQ(1));
|
---|
| 59 | mrb_define_method(mrb, i, "anybits?", mrb_int_anybits, MRB_ARGS_REQ(1));
|
---|
| 60 | mrb_define_method(mrb, i, "nobits?", mrb_int_nobits, MRB_ARGS_REQ(1));
|
---|
| 61 |
|
---|
| 62 | #ifndef MRB_WITHOUT_FLOAT
|
---|
| 63 | mrb_define_const(mrb, mrb->float_class, "RADIX", mrb_fixnum_value(MRB_FLT_RADIX));
|
---|
| 64 | mrb_define_const(mrb, mrb->float_class, "MANT_DIG", mrb_fixnum_value(MRB_FLT_MANT_DIG));
|
---|
| 65 | mrb_define_const(mrb, mrb->float_class, "EPSILON", mrb_float_value(mrb, MRB_FLT_EPSILON));
|
---|
| 66 | mrb_define_const(mrb, mrb->float_class, "DIG", mrb_fixnum_value(MRB_FLT_DIG));
|
---|
| 67 | mrb_define_const(mrb, mrb->float_class, "MIN_EXP", mrb_fixnum_value(MRB_FLT_MIN_EXP));
|
---|
| 68 | mrb_define_const(mrb, mrb->float_class, "MIN", mrb_float_value(mrb, MRB_FLT_MIN));
|
---|
| 69 | mrb_define_const(mrb, mrb->float_class, "MIN_10_EXP", mrb_fixnum_value(MRB_FLT_MIN_10_EXP));
|
---|
| 70 | mrb_define_const(mrb, mrb->float_class, "MAX_EXP", mrb_fixnum_value(MRB_FLT_MAX_EXP));
|
---|
| 71 | mrb_define_const(mrb, mrb->float_class, "MAX", mrb_float_value(mrb, MRB_FLT_MAX));
|
---|
| 72 | mrb_define_const(mrb, mrb->float_class, "MAX_10_EXP", mrb_fixnum_value(MRB_FLT_MAX_10_EXP));
|
---|
| 73 | #endif /* MRB_WITHOUT_FLOAT */
|
---|
[270] | 74 | }
|
---|
| 75 |
|
---|
| 76 | void
|
---|
| 77 | mrb_mruby_numeric_ext_gem_final(mrb_state* mrb)
|
---|
| 78 | {
|
---|
| 79 | }
|
---|