Ignore:
Timestamp:
Jul 9, 2020, 8:51:43 AM (4 years ago)
Author:
coas-nagasima
Message:

mrubyを2.1.1に更新

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  
    11#include <limits.h>
    22#include <mruby.h>
     3#include <mruby/numeric.h>
    34
     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 */
    411static mrb_value
    5 mrb_int_chr(mrb_state *mrb, mrb_value x)
     12mrb_int_allbits(mrb_state *mrb, mrb_value self)
    613{
    7   mrb_int chr;
    8   char c;
     14  mrb_int n, m;
    915
    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}
    1520
    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 */
     27static mrb_value
     28mrb_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 */
     43static mrb_value
     44mrb_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);
    1751}
    1852
     
    2054mrb_mruby_numeric_ext_gem_init(mrb_state* mrb)
    2155{
    22   struct RClass *i = mrb_class_get(mrb, "Integer");
     56  struct RClass *i = mrb_module_get(mrb, "Integral");
    2357
    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 */
    2574}
    2675
Note: See TracChangeset for help on using the changeset viewer.