Ruby  2.4.2p198(2017-09-14revision59899)
Macros | Functions | Variables
range.c File Reference
#include "internal.h"
#include "id.h"
#include <math.h>
Include dependency graph for range.c:

Go to the source code of this file.

Macros

#define id_cmp   idCmp
 
#define id_succ   idSucc
 
#define RANGE_BEG(r)   (RSTRUCT(r)->as.ary[0])
 
#define RANGE_END(r)   (RSTRUCT(r)->as.ary[1])
 
#define RANGE_EXCL(r)   (RSTRUCT(r)->as.ary[2])
 
#define RANGE_SET_BEG(r, v)   (RSTRUCT_SET(r, 0, v))
 
#define RANGE_SET_END(r, v)   (RSTRUCT_SET(r, 1, v))
 
#define RANGE_SET_EXCL(r, v)   (RSTRUCT_SET(r, 2, v))
 
#define RBOOL(v)   ((v) ? Qtrue : Qfalse)
 
#define EXCL(r)   RTEST(RANGE_EXCL(r))
 
#define BSEARCH_CHECK(expr)
 
#define BSEARCH(conv)
 
#define rb_intern(str)   rb_intern_const(str)
 

Functions

static VALUE r_cover_p (VALUE, VALUE, VALUE, VALUE)
 
static VALUE range_failed (void)
 
static VALUE range_check (VALUE *args)
 
static void range_init (VALUE range, VALUE beg, VALUE end, VALUE exclude_end)
 
VALUE rb_range_new (VALUE beg, VALUE end, int exclude_end)
 
static void range_modify (VALUE range)
 
static VALUE range_initialize (int argc, VALUE *argv, VALUE range)
 
static VALUE range_initialize_copy (VALUE range, VALUE orig)
 
static VALUE range_exclude_end_p (VALUE range)
 
static VALUE recursive_equal (VALUE range, VALUE obj, int recur)
 
static VALUE range_eq (VALUE range, VALUE obj)
 
static int r_less (VALUE a, VALUE b)
 
static VALUE recursive_eql (VALUE range, VALUE obj, int recur)
 
static VALUE range_eql (VALUE range, VALUE obj)
 
static VALUE range_hash (VALUE range)
 
static void range_each_func (VALUE range, rb_block_call_func *func, VALUE arg)
 
static VALUE sym_step_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, arg))
 
static VALUE step_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, arg))
 
static int discrete_object_p (VALUE obj)
 
static int linear_object_p (VALUE obj)
 
static VALUE check_step_domain (VALUE step)
 
static VALUE range_step_size (VALUE range, VALUE args, VALUE eobj)
 
static VALUE range_step (int argc, VALUE *argv, VALUE range)
 
static int is_integer_p (VALUE v)
 
static VALUE range_bsearch (VALUE range)
 
static VALUE each_i (RB_BLOCK_CALL_FUNC_ARGLIST(v, arg))
 
static VALUE sym_each_i (RB_BLOCK_CALL_FUNC_ARGLIST(v, arg))
 
static VALUE range_size (VALUE range)
 
static VALUE range_enum_size (VALUE range, VALUE args, VALUE eobj)
 
static VALUE range_each (VALUE range)
 
static VALUE range_begin (VALUE range)
 
static VALUE range_end (VALUE range)
 
static VALUE first_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, cbarg))
 
static VALUE range_first (int argc, VALUE *argv, VALUE range)
 
static VALUE range_last (int argc, VALUE *argv, VALUE range)
 
static VALUE range_min (int argc, VALUE *argv, VALUE range)
 
static VALUE range_max (int argc, VALUE *argv, VALUE range)
 
int rb_range_values (VALUE range, VALUE *begp, VALUE *endp, int *exclp)
 
VALUE rb_range_beg_len (VALUE range, long *begp, long *lenp, long len, int err)
 
static VALUE range_to_s (VALUE range)
 
static VALUE inspect_range (VALUE range, VALUE dummy, int recur)
 
static VALUE range_inspect (VALUE range)
 
static VALUE range_eqq (VALUE range, VALUE val)
 
static VALUE range_include (VALUE range, VALUE val)
 
static VALUE range_cover (VALUE range, VALUE val)
 
static VALUE range_dumper (VALUE range)
 
static VALUE range_loader (VALUE range, VALUE obj)
 
static VALUE range_alloc (VALUE klass)
 
void Init_Range (void)
 

Variables

VALUE rb_cRange
 
static ID id_beg
 
static ID id_end
 
static ID id_excl
 
static ID id_integer_p
 
static ID id_div
 

Macro Definition Documentation

◆ BSEARCH

#define BSEARCH (   conv)
Value:
do { \
RETURN_ENUMERATOR(range, 0, 0); \
if (EXCL(range)) high--; \
org_high = high; \
while (low < high) { \
mid = ((high < 0) == (low < 0)) ? low + ((high - low) / 2) \
: (low < -high) ? -((-1 - low - high)/2 + 1) : (low + high) / 2; \
BSEARCH_CHECK(conv(mid)); \
if (smaller) { \
high = mid; \
} \
else { \
low = mid + 1; \
} \
} \
if (low == org_high) { \
BSEARCH_CHECK(conv(low)); \
if (!smaller) return Qnil; \
} \
return satisfied; \
} while (0)
#define EXCL(r)
Definition: range.c:35
#define range(low, item, hi)
Definition: date_strftime.c:21
#define Qnil
Definition: ruby.h:438

Referenced by range_bsearch().

◆ BSEARCH_CHECK

#define BSEARCH_CHECK (   expr)
Value:
do { \
VALUE val = (expr); \
VALUE v = rb_yield(val); \
if (FIXNUM_P(v)) { \
if (v == INT2FIX(0)) return val; \
smaller = (SIGNED_VALUE)v < 0; \
} \
else if (v == Qtrue) { \
satisfied = val; \
smaller = 1; \
} \
else if (v == Qfalse || v == Qnil) { \
smaller = 0; \
} \
else if (rb_obj_is_kind_of(v, rb_cNumeric)) { \
int cmp = rb_cmpint(rb_funcall(v, id_cmp, 1, INT2FIX(0)), v, INT2FIX(0)); \
if (!cmp) return val; \
smaller = cmp < 0; \
} \
else { \
rb_raise(rb_eTypeError, "wrong argument type %"PRIsVALUE \
" (must be numeric, true, false or nil)", \
rb_obj_class(v)); \
} \
} while (0)
static int cmp(VALUE x, VALUE y)
Definition: time.c:57
#define Qtrue
Definition: ruby.h:437
VALUE rb_eTypeError
Definition: error.c:762
if(len<=MAX_WORD_LENGTH &&len >=MIN_WORD_LENGTH)
Definition: zonetab.h:883
VALUE rb_funcall(VALUE, ID, int,...)
Calls a method.
Definition: vm_eval.c:821
VALUE rb_obj_is_kind_of(VALUE, VALUE)
Definition: object.c:690
#define FIXNUM_P(f)
Definition: ruby.h:365
int rb_cmpint(VALUE val, VALUE a, VALUE b)
Definition: bignum.c:2909
#define val
return
Definition: zonetab.h:899
#define Qfalse
Definition: ruby.h:436
VALUE rb_yield(VALUE)
Definition: vm_eval.c:1020
#define PRIsVALUE
Definition: ruby.h:135
#define Qnil
Definition: ruby.h:438
#define id_cmp
Definition: range.c:22
RUBY_EXTERN VALUE rb_cNumeric
Definition: ruby.h:1898
#define INT2FIX(i)
Definition: ruby.h:232
VALUE rb_obj_class(VALUE)
Definition: object.c:229
#define SIGNED_VALUE
Definition: ruby.h:87

Referenced by range_bsearch().

◆ EXCL

#define EXCL (   r)    RTEST(RANGE_EXCL(r))

◆ id_cmp

#define id_cmp   idCmp

Definition at line 22 of file range.c.

Referenced by r_less(), range_bsearch(), range_check(), range_max(), and range_min().

◆ id_succ

#define id_succ   idSucc

Definition at line 23 of file range.c.

Referenced by discrete_object_p(), and range_each_func().

◆ RANGE_BEG

#define RANGE_BEG (   r)    (RSTRUCT(r)->as.ary[0])

◆ RANGE_END

#define RANGE_END (   r)    (RSTRUCT(r)->as.ary[1])

◆ RANGE_EXCL

#define RANGE_EXCL (   r)    (RSTRUCT(r)->as.ary[2])

Definition at line 29 of file range.c.

Referenced by range_dumper(), range_include(), and range_modify().

◆ RANGE_SET_BEG

#define RANGE_SET_BEG (   r,
 
)    (RSTRUCT_SET(r, 0, v))

Definition at line 30 of file range.c.

Referenced by range_init().

◆ RANGE_SET_END

#define RANGE_SET_END (   r,
 
)    (RSTRUCT_SET(r, 1, v))

Definition at line 31 of file range.c.

Referenced by range_init().

◆ RANGE_SET_EXCL

#define RANGE_SET_EXCL (   r,
 
)    (RSTRUCT_SET(r, 2, v))

Definition at line 32 of file range.c.

Referenced by range_init().

◆ rb_intern

#define rb_intern (   str)    rb_intern_const(str)

◆ RBOOL

#define RBOOL (   v)    ((v) ? Qtrue : Qfalse)

Definition at line 33 of file range.c.

Referenced by range_initialize(), range_loader(), and rb_range_new().

Function Documentation

◆ check_step_domain()

static VALUE check_step_domain ( VALUE  step)
static

◆ discrete_object_p()

static int discrete_object_p ( VALUE  obj)
static

Definition at line 316 of file range.c.

References FALSE, id_succ, rb_cTime, rb_obj_is_kind_of(), and rb_respond_to().

Referenced by range_each(), and range_step().

◆ each_i()

static VALUE each_i ( RB_BLOCK_CALL_FUNC_ARGLIST(v, arg)  )
static

Definition at line 695 of file range.c.

References Qnil, and rb_yield().

Referenced by range_each().

◆ first_i()

static VALUE first_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, cbarg)  )
static

Definition at line 840 of file range.c.

References INT2NUM, NUM2LONG, Qnil, rb_ary_push(), and rb_iter_break().

Referenced by range_first().

◆ Init_Range()

void Init_Range ( void  )

◆ inspect_range()

static VALUE inspect_range ( VALUE  range,
VALUE  dummy,
int  recur 
)
static

Definition at line 1086 of file range.c.

References EXCL, OBJ_INFECT, RANGE_BEG, RANGE_END, rb_inspect(), rb_str_append(), rb_str_cat(), rb_str_dup(), and rb_str_new2.

Referenced by range_inspect().

◆ is_integer_p()

static int is_integer_p ( VALUE  v)
static

Definition at line 518 of file range.c.

References id_integer_p, Qundef, rb_check_funcall(), and RTEST.

Referenced by range_bsearch().

◆ linear_object_p()

static int linear_object_p ( VALUE  obj)
static

◆ r_cover_p()

static VALUE r_cover_p ( VALUE  range,
VALUE  beg,
VALUE  end,
VALUE  val 
)
static

Definition at line 1207 of file range.c.

References EXCL, Qfalse, Qtrue, and r_less().

Referenced by range_cover(), and range_include().

◆ r_less()

static int r_less ( VALUE  a,
VALUE  b 
)
static

Definition at line 181 of file range.c.

References id_cmp, NIL_P, rb_cmpint(), and rb_funcall().

Referenced by r_cover_p(), and range_each_func().

◆ range_alloc()

static VALUE range_alloc ( VALUE  klass)
static

Definition at line 1251 of file range.c.

References rb_struct_alloc_noinit().

Referenced by Init_Range().

◆ range_begin()

static VALUE range_begin ( VALUE  range)
static

Definition at line 815 of file range.c.

References RANGE_BEG.

Referenced by Init_Range().

◆ range_bsearch()

static VALUE range_bsearch ( VALUE  range)
static

◆ range_check()

static VALUE range_check ( VALUE args)
static

Definition at line 45 of file range.c.

References id_cmp, and rb_funcall().

Referenced by range_init().

◆ range_cover()

static VALUE range_cover ( VALUE  range,
VALUE  val 
)
static

Definition at line 1197 of file range.c.

References r_cover_p(), RANGE_BEG, and RANGE_END.

Referenced by Init_Range().

◆ range_dumper()

static VALUE range_dumper ( VALUE  range)
static

◆ range_each()

static VALUE range_each ( VALUE  range)
static

◆ range_each_func()

static void range_each_func ( VALUE  range,
rb_block_call_func func,
VALUE  arg 
)
static

Definition at line 257 of file range.c.

References EXCL, id_succ, r_less(), RANGE_BEG, RANGE_END, and rb_funcallv.

Referenced by range_each(), and range_step().

◆ range_end()

static VALUE range_end ( VALUE  range)
static

Definition at line 833 of file range.c.

References RANGE_END.

Referenced by Init_Range().

◆ range_enum_size()

static VALUE range_enum_size ( VALUE  range,
VALUE  args,
VALUE  eobj 
)
static

Definition at line 731 of file range.c.

References range_size().

Referenced by range_each().

◆ range_eq()

static VALUE range_eq ( VALUE  range,
VALUE  obj 
)
static

Definition at line 165 of file range.c.

References Qfalse, Qtrue, rb_cRange, rb_exec_recursive_paired(), rb_obj_is_kind_of(), and recursive_equal().

Referenced by Init_Range().

◆ range_eql()

static VALUE range_eql ( VALUE  range,
VALUE  obj 
)
static

Definition at line 219 of file range.c.

References Qfalse, Qtrue, rb_cRange, rb_exec_recursive_paired(), rb_obj_is_kind_of(), and recursive_eql().

Referenced by Init_Range().

◆ range_eqq()

static VALUE range_eqq ( VALUE  range,
VALUE  val 
)
static

Definition at line 1139 of file range.c.

References rb_funcall(), and rb_intern.

Referenced by Init_Range().

◆ range_exclude_end_p()

static VALUE range_exclude_end_p ( VALUE  range)
static

Definition at line 130 of file range.c.

References EXCL, Qfalse, and Qtrue.

Referenced by Init_Range().

◆ range_failed()

static VALUE range_failed ( void  )
static

Definition at line 38 of file range.c.

References Qnil, rb_eArgError, and rb_raise().

Referenced by range_init().

◆ range_first()

static VALUE range_first ( int  argc,
VALUE argv,
VALUE  range 
)
static

Definition at line 867 of file range.c.

References first_i(), NUM2LONG, RANGE_BEG, rb_ary_new2, rb_block_call(), and rb_scan_args().

Referenced by Init_Range(), and range_min().

◆ range_hash()

static VALUE range_hash ( VALUE  range)
static

Definition at line 240 of file range.c.

References EXCL, hash(), LONG2FIX, NUM2LONG, RANGE_BEG, RANGE_END, rb_hash(), rb_hash_end(), rb_hash_start(), and rb_hash_uint().

Referenced by Init_Range().

◆ range_include()

static VALUE range_include ( VALUE  range,
VALUE  val 
)
static

◆ range_init()

static void range_init ( VALUE  range,
VALUE  beg,
VALUE  end,
VALUE  exclude_end 
)
static

◆ range_initialize()

static VALUE range_initialize ( int  argc,
VALUE argv,
VALUE  range 
)
static

Definition at line 100 of file range.c.

References Qnil, range_init(), range_modify(), rb_scan_args(), RBOOL, and RTEST.

Referenced by Init_Range().

◆ range_initialize_copy()

static VALUE range_initialize_copy ( VALUE  range,
VALUE  orig 
)
static

Definition at line 112 of file range.c.

References range, range_modify(), and rb_struct_init_copy().

Referenced by Init_Range().

◆ range_inspect()

static VALUE range_inspect ( VALUE  range)
static

Definition at line 1114 of file range.c.

References inspect_range(), and rb_exec_recursive().

Referenced by Init_Range().

◆ range_last()

static VALUE range_last ( int  argc,
VALUE argv,
VALUE  range 
)
static

Definition at line 900 of file range.c.

References RANGE_END, rb_Array(), and rb_ary_last().

Referenced by Init_Range().

◆ range_loader()

static VALUE range_loader ( VALUE  range,
VALUE  obj 
)
static

◆ range_max()

static VALUE range_max ( int  argc,
VALUE argv,
VALUE  range 
)
static

◆ range_min()

static VALUE range_min ( int  argc,
VALUE argv,
VALUE  range 
)
static

Definition at line 926 of file range.c.

References EXCL, id_cmp, Qnil, RANGE_BEG, RANGE_END, range_first(), rb_block_given_p(), rb_call_super(), rb_cmpint(), and rb_funcall().

Referenced by Init_Range().

◆ range_modify()

static void range_modify ( VALUE  range)
static

Definition at line 81 of file range.c.

References ID2SYM, Qnil, RANGE_EXCL, rb_check_frozen, and rb_name_err_raise.

Referenced by range_initialize(), range_initialize_copy(), and range_loader().

◆ range_size()

static VALUE range_size ( VALUE  range)
static

◆ range_step()

static VALUE range_step ( int  argc,
VALUE argv,
VALUE  range 
)
static

◆ range_step_size()

static VALUE range_step_size ( VALUE  range,
VALUE  args,
VALUE  eobj 
)
static

◆ range_to_s()

static VALUE range_to_s ( VALUE  range)
static

Definition at line 1071 of file range.c.

References EXCL, OBJ_INFECT, RANGE_BEG, RANGE_END, rb_obj_as_string(), rb_str_append(), rb_str_cat(), and rb_str_dup().

Referenced by Init_Range().

◆ rb_range_beg_len()

VALUE rb_range_beg_len ( VALUE  range,
long *  begp,
long *  lenp,
long  len,
int  err 
)

◆ rb_range_new()

VALUE rb_range_new ( VALUE  beg,
VALUE  end,
int  exclude_end 
)

Definition at line 72 of file range.c.

References range, range_init(), rb_cRange, rb_obj_alloc(), and RBOOL.

Referenced by ibf_load_object_struct(), and iseq_compile_each().

◆ rb_range_values()

int rb_range_values ( VALUE  range,
VALUE begp,
VALUE endp,
int *  exclp 
)

◆ recursive_eql()

static VALUE recursive_eql ( VALUE  range,
VALUE  obj,
int  recur 
)
static

Definition at line 191 of file range.c.

References EXCL, Qfalse, Qtrue, RANGE_BEG, RANGE_END, and rb_eql().

Referenced by range_eql().

◆ recursive_equal()

static VALUE recursive_equal ( VALUE  range,
VALUE  obj,
int  recur 
)
static

Definition at line 136 of file range.c.

References EXCL, Qfalse, Qtrue, RANGE_BEG, RANGE_END, and rb_equal().

Referenced by range_eq().

◆ step_i()

static VALUE step_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, arg)  )
static

Definition at line 298 of file range.c.

References FIXNUM_FLAG, FIXNUM_P, INT2FIX, Qnil, rb_funcall(), and rb_yield().

Referenced by range_step().

◆ sym_each_i()

static VALUE sym_each_i ( RB_BLOCK_CALL_FUNC_ARGLIST(v, arg)  )
static

Definition at line 702 of file range.c.

References Qnil, rb_str_intern(), and rb_yield().

Referenced by range_each().

◆ sym_step_i()

static VALUE sym_step_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, arg)  )
static

Definition at line 280 of file range.c.

References FIXNUM_FLAG, FIXNUM_P, INT2FIX, Qnil, rb_funcall(), rb_str_intern(), and rb_yield().

Referenced by range_step().

Variable Documentation

◆ id_beg

ID id_beg
static

Definition at line 21 of file range.c.

Referenced by Init_Range(), range_dumper(), range_loader(), and rb_range_values().

◆ id_div

ID id_div
static

Definition at line 21 of file range.c.

Referenced by Init_Range(), and range_bsearch().

◆ id_end

ID id_end
static

Definition at line 21 of file range.c.

Referenced by Init_Range(), range_dumper(), range_loader(), and rb_range_values().

◆ id_excl

ID id_excl
static

Definition at line 21 of file range.c.

Referenced by Init_Range(), range_dumper(), and range_loader().

◆ id_integer_p

ID id_integer_p
static

Definition at line 21 of file range.c.

Referenced by Init_Range(), and is_integer_p().

◆ rb_cRange

VALUE rb_cRange

Definition at line 20 of file range.c.

Referenced by Init_Range(), range_eq(), range_eql(), rb_range_new(), and rb_range_values().