Ruby  2.5.0dev(2017-10-22revision60238)
Macros | Functions | Variables
range.c File Reference
#include "internal.h"
#include "id.h"
#include <math.h>

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

VALUE rb_range_new (VALUE beg, VALUE end, int exclude_end)
 
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)
 
void Init_Range (void)
 

Variables

VALUE rb_cRange
 

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

◆ 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)
#define Qtrue
Definition: ruby.h:437
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:774
#define FIXNUM_P(f)
Definition: ruby.h:365
VALUE rb_obj_class(VALUE)
call-seq: obj.class -> class
Definition: object.c:277
VALUE rb_obj_is_kind_of(VALUE, VALUE)
call-seq: obj.is_a?(class) -> true or false obj.kind_of?(class) -> true or false
Definition: object.c:842
#define val
return
Definition: zonetab.h:899
#define Qfalse
Definition: ruby.h:436
VALUE rb_yield(VALUE)
Definition: vm_eval.c:973
#define PRIsVALUE
Definition: ruby.h:135
#define Qnil
Definition: ruby.h:438
#define id_cmp
Definition: range.c:22
VALUE rb_eTypeError
Definition: error.c:801
#define rb_cmpint(cmp, a, b)
RUBY_EXTERN VALUE rb_cNumeric
Definition: ruby.h:1919
#define INT2FIX(i)
Definition: ruby.h:232
#define SIGNED_VALUE
Definition: ruby.h:87

◆ EXCL

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

Definition at line 35 of file range.c.

Referenced by rb_range_values().

◆ id_cmp

#define id_cmp   idCmp

Definition at line 22 of file range.c.

◆ id_succ

#define id_succ   idSucc

Definition at line 23 of file range.c.

◆ RANGE_BEG

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

Definition at line 27 of file range.c.

Referenced by rb_range_values().

◆ RANGE_END

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

Definition at line 28 of file range.c.

Referenced by rb_range_values().

◆ RANGE_EXCL

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

Definition at line 29 of file range.c.

◆ RANGE_SET_BEG

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

Definition at line 30 of file range.c.

◆ RANGE_SET_END

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

Definition at line 31 of file range.c.

◆ RANGE_SET_EXCL

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

Definition at line 32 of file range.c.

◆ 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.

Function Documentation

◆ Init_Range()

void Init_Range ( void  )

Definition at line 1300 of file range.c.

◆ rb_range_beg_len()

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

Definition at line 1003 of file range.c.

References len, NUM2LONG, Qfalse, Qnil, Qtrue, rb_eRangeError, rb_raise(), and rb_range_values().

Referenced by rb_ary_aref(), and rb_get_values_at().

◆ rb_range_new()

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

Definition at line 54 of file range.c.

References range, rb_cRange, and rb_obj_alloc().

◆ rb_range_values()

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

Definition at line 979 of file range.c.

References EXCL, RANGE_BEG, RANGE_END, rb_cRange, rb_obj_is_kind_of(), and rb_respond_to().

Referenced by rb_range_beg_len().

Variable Documentation

◆ rb_cRange

VALUE rb_cRange

Definition at line 20 of file range.c.

Referenced by rb_range_new(), and rb_range_values().