- Timestamp:
- Jul 9, 2020, 8:51:43 AM (4 years ago)
- Location:
- EcnlProtoTool/trunk/mruby-2.1.1
- Files:
-
- 1 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-numeric-ext/src/numeric_ext.c
r331 r439 1 1 #include <limits.h> 2 2 #include <mruby.h> 3 #include <mruby/numeric.h> 3 4 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 */ 4 11 static mrb_value 5 mrb_int_ chr(mrb_state *mrb, mrb_value x)12 mrb_int_allbits(mrb_state *mrb, mrb_value self) 6 13 { 7 mrb_int chr; 8 char c; 14 mrb_int n, m; 9 15 10 chr = mrb_fixnum(x); 11 if (chr >= (1 << CHAR_BIT)) { 12 mrb_raisef(mrb, E_RANGE_ERROR, "%S out of char range", x); 13 } 14 c = (char)chr; 16 mrb_get_args(mrb, "i", &m); 17 n = mrb_int(mrb, self); 18 return mrb_bool_value((n & m) == m); 19 } 15 20 16 return mrb_str_new(mrb, &c, 1); 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); 35 } 36 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); 17 51 } 18 52 … … 20 54 mrb_mruby_numeric_ext_gem_init(mrb_state* mrb) 21 55 { 22 struct RClass *i = mrb_ class_get(mrb, "Integer");56 struct RClass *i = mrb_module_get(mrb, "Integral"); 23 57 24 mrb_define_method(mrb, i, "chr", mrb_int_chr, MRB_ARGS_NONE()); 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 */ 25 74 } 26 75
Note:
See TracChangeset
for help on using the changeset viewer.