Ruby  2.4.2p198(2017-09-14revision59899)
Data Structures | Macros | Functions | Variables
enum.c File Reference
#include "internal.h"
#include "ruby/util.h"
#include "id.h"
#include <assert.h>
Include dependency graph for enum.c:

Go to the source code of this file.

Data Structures

struct  sort_by_data
 
struct  nmin_data
 
struct  min_t
 
struct  max_t
 
struct  minmax_t
 
struct  minmax_by_t
 
struct  chunk_arg
 
struct  slicebefore_arg
 
struct  sliceafter_arg
 
struct  slicewhen_arg
 
struct  enum_sum_memo
 

Macros

#define id_each   idEach
 
#define id_eqq   idEqq
 
#define id_cmp   idCmp
 
#define id_lshift   idLTLT
 
#define ENUM_WANT_SVALUE()
 
#define SORT_BY_BUFSIZE   16
 
#define ENUMFUNC(name)   rb_block_given_p() ? name##_iter_i : name##_i
 
#define DEFINE_ENUMFUNCS(name)
 
#define GETPTR(i)   (beg+(i)*eltsize)
 
#define SWAP(i, j)
 
#define dont_recycle_block_arg(arity)   ((arity) == 1 || (arity) < 0)
 
#define UPDATE_MEMO   ((void)(memo = MEMO_FOR(struct sliceafter_arg, _memo)))
 
#define UPDATE_MEMO   ((void)(memo = MEMO_FOR(struct slicewhen_arg, _memo)))
 
#define rb_intern(str)   rb_intern_const(str)
 

Functions

VALUE rb_enum_values_pack (int argc, const VALUE *argv)
 
static VALUE enum_yield (int argc, VALUE ary)
 
static VALUE enum_yield_array (VALUE ary)
 
static VALUE grep_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, args))
 
static VALUE grep_iter_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, args))
 
static VALUE enum_grep (VALUE obj, VALUE pat)
 
static VALUE enum_grep_v (VALUE obj, VALUE pat)
 
static VALUE count_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, memop))
 
static VALUE count_iter_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, memop))
 
static VALUE count_all_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, memop))
 
static VALUE enum_count (int argc, VALUE *argv, VALUE obj)
 
static VALUE find_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, memop))
 
static VALUE enum_find (int argc, VALUE *argv, VALUE obj)
 
static VALUE find_index_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, memop))
 
static VALUE find_index_iter_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, memop))
 
static VALUE enum_find_index (int argc, VALUE *argv, VALUE obj)
 
static VALUE find_all_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, ary))
 
static VALUE enum_size (VALUE self, VALUE args, VALUE eobj)
 
static long limit_by_enum_size (VALUE obj, long n)
 
static int enum_size_over_p (VALUE obj, long n)
 
static VALUE enum_find_all (VALUE obj)
 
static VALUE reject_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, ary))
 
static VALUE enum_reject (VALUE obj)
 
static VALUE collect_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, ary))
 
static VALUE collect_all (RB_BLOCK_CALL_FUNC_ARGLIST(i, ary))
 
static VALUE enum_collect (VALUE obj)
 
static VALUE flat_map_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, ary))
 
static VALUE enum_flat_map (VALUE obj)
 
static VALUE enum_to_a (int argc, VALUE *argv, VALUE obj)
 
static VALUE enum_to_h_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, hash))
 
static VALUE enum_to_h (int argc, VALUE *argv, VALUE obj)
 
static VALUE inject_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, p))
 
static VALUE inject_op_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, p))
 
static VALUE ary_inject_op (VALUE ary, VALUE init, VALUE op)
 
static VALUE enum_inject (int argc, VALUE *argv, VALUE obj)
 
static VALUE partition_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, arys))
 
static VALUE enum_partition (VALUE obj)
 
static VALUE group_by_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, hash))
 
static VALUE enum_group_by (VALUE obj)
 
static VALUE first_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, params))
 
static VALUE enum_take (VALUE obj, VALUE n)
 
static VALUE enum_first (int argc, VALUE *argv, VALUE obj)
 
static VALUE enum_sort (VALUE obj)
 
static VALUE sort_by_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, _data))
 
static int sort_by_cmp (const void *ap, const void *bp, void *data)
 
static VALUE enum_sort_by (VALUE obj)
 
 DEFINE_ENUMFUNCS (all)
 
static VALUE enum_all (VALUE obj)
 
 DEFINE_ENUMFUNCS (any)
 
static VALUE enum_any (VALUE obj)
 
 DEFINE_ENUMFUNCS (one)
 
static int nmin_cmp (const void *ap, const void *bp, void *_data)
 
static int nmin_block_cmp (const void *ap, const void *bp, void *_data)
 
static void nmin_filter (struct nmin_data *data)
 
static VALUE nmin_i (VALUE i, VALUE *_data, int argc, VALUE *argv)
 
VALUE rb_nmin_run (VALUE obj, VALUE num, int by, int rev, int ary)
 
static VALUE enum_one (VALUE obj)
 
 DEFINE_ENUMFUNCS (none)
 
static VALUE enum_none (VALUE obj)
 
static VALUE min_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, args))
 
static VALUE min_ii (RB_BLOCK_CALL_FUNC_ARGLIST(i, args))
 
static VALUE enum_min (int argc, VALUE *argv, VALUE obj)
 
static VALUE max_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, args))
 
static VALUE max_ii (RB_BLOCK_CALL_FUNC_ARGLIST(i, args))
 
static VALUE enum_max (int argc, VALUE *argv, VALUE obj)
 
static void minmax_i_update (VALUE i, VALUE j, struct minmax_t *memo)
 
static VALUE minmax_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, _memo))
 
static void minmax_ii_update (VALUE i, VALUE j, struct minmax_t *memo)
 
static VALUE minmax_ii (RB_BLOCK_CALL_FUNC_ARGLIST(i, _memo))
 
static VALUE enum_minmax (VALUE obj)
 
static VALUE min_by_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, args))
 
static VALUE enum_min_by (int argc, VALUE *argv, VALUE obj)
 
static VALUE max_by_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, args))
 
static VALUE enum_max_by (int argc, VALUE *argv, VALUE obj)
 
static void minmax_by_i_update (VALUE v1, VALUE v2, VALUE i1, VALUE i2, struct minmax_by_t *memo)
 
static VALUE minmax_by_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, _memo))
 
static VALUE enum_minmax_by (VALUE obj)
 
static VALUE member_i (RB_BLOCK_CALL_FUNC_ARGLIST(iter, args))
 
static VALUE enum_member (VALUE obj, VALUE val)
 
static VALUE each_with_index_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, memo))
 
static VALUE enum_each_with_index (int argc, VALUE *argv, VALUE obj)
 
static VALUE enum_reverse_each (int argc, VALUE *argv, VALUE obj)
 
static VALUE each_val_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, p))
 
static VALUE enum_each_entry (int argc, VALUE *argv, VALUE obj)
 
static VALUE each_slice_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, m))
 
static VALUE enum_each_slice_size (VALUE obj, VALUE args, VALUE eobj)
 
static VALUE enum_each_slice (VALUE obj, VALUE n)
 
static VALUE each_cons_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, args))
 
static VALUE enum_each_cons_size (VALUE obj, VALUE args, VALUE eobj)
 
static VALUE enum_each_cons (VALUE obj, VALUE n)
 
static VALUE each_with_object_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, memo))
 
static VALUE enum_each_with_object (VALUE obj, VALUE memo)
 
static VALUE zip_ary (RB_BLOCK_CALL_FUNC_ARGLIST(val, memoval))
 
static VALUE call_next (VALUE *v)
 
static VALUE call_stop (VALUE *v)
 
static VALUE zip_i (RB_BLOCK_CALL_FUNC_ARGLIST(val, memoval))
 
static VALUE enum_zip (int argc, VALUE *argv, VALUE obj)
 
static VALUE take_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, args))
 
static VALUE take_while_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, ary))
 
static VALUE enum_take_while (VALUE obj)
 
static VALUE drop_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, args))
 
static VALUE enum_drop (VALUE obj, VALUE n)
 
static VALUE drop_while_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, args))
 
static VALUE enum_drop_while (VALUE obj)
 
static VALUE cycle_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, ary))
 
static VALUE enum_cycle_size (VALUE self, VALUE args, VALUE eobj)
 
static VALUE enum_cycle (int argc, VALUE *argv, VALUE obj)
 
static VALUE chunk_ii (RB_BLOCK_CALL_FUNC_ARGLIST(i, _argp))
 
static VALUE chunk_i (RB_BLOCK_CALL_FUNC_ARGLIST(yielder, enumerator))
 
static VALUE enum_chunk (VALUE enumerable)
 
static VALUE slicebefore_ii (RB_BLOCK_CALL_FUNC_ARGLIST(i, _argp))
 
static VALUE slicebefore_i (RB_BLOCK_CALL_FUNC_ARGLIST(yielder, enumerator))
 
static VALUE enum_slice_before (int argc, VALUE *argv, VALUE enumerable)
 
static VALUE sliceafter_ii (RB_BLOCK_CALL_FUNC_ARGLIST(i, _memo))
 
static VALUE sliceafter_i (RB_BLOCK_CALL_FUNC_ARGLIST(yielder, enumerator))
 
static VALUE enum_slice_after (int argc, VALUE *argv, VALUE enumerable)
 
static VALUE slicewhen_ii (RB_BLOCK_CALL_FUNC_ARGLIST(i, _memo))
 
static VALUE slicewhen_i (RB_BLOCK_CALL_FUNC_ARGLIST(yielder, enumerator))
 
static VALUE enum_slice_when (VALUE enumerable)
 
static VALUE enum_chunk_while (VALUE enumerable)
 
static void sum_iter (VALUE i, struct enum_sum_memo *memo)
 
static VALUE enum_sum_i (RB_BLOCK_CALL_FUNC_ARGLIST(i, args))
 
static int hash_sum_i (VALUE key, VALUE value, VALUE arg)
 
static void hash_sum (VALUE hash, struct enum_sum_memo *memo)
 
static VALUE int_range_sum (VALUE beg, VALUE end, int excl, VALUE init)
 
static VALUE enum_sum (int argc, VALUE *argv, VALUE obj)
 
static VALUE uniq_func (RB_BLOCK_CALL_FUNC_ARGLIST(i, hash))
 
static VALUE uniq_iter (RB_BLOCK_CALL_FUNC_ARGLIST(i, hash))
 
static VALUE enum_uniq (VALUE obj)
 
void Init_Enumerable (void)
 

Variables

VALUE rb_mEnumerable
 
static ID id_next
 
static ID id_div
 
static ID id_call
 
static ID id_size
 

Macro Definition Documentation

◆ DEFINE_ENUMFUNCS

#define DEFINE_ENUMFUNCS (   name)
Value:
static VALUE enum_##name##_func(VALUE result, struct MEMO *memo); \
\
static VALUE \
name##_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, memo)) \
{ \
return enum_##name##_func(rb_enum_values_pack(argc, argv), MEMO_CAST(memo)); \
} \
\
static VALUE \
name##_iter_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, memo)) \
{ \
return enum_##name##_func(rb_yield_values2(argc, argv), MEMO_CAST(memo)); \
} \
\
static VALUE \
enum_##name##_func(VALUE result, struct MEMO *memo)
#define MEMO_CAST(m)
Definition: internal.h:834
#define RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg)
Definition: ruby.h:1830
Definition: internal.h:818
int argc
Definition: ruby.c:183
unsigned long VALUE
Definition: ruby.h:85
static VALUE result
Definition: nkf.c:40
VALUE rb_yield_values2(int n, const VALUE *argv)
Definition: vm_eval.c:1053
VALUE rb_enum_values_pack(int argc, const VALUE *argv)
Definition: enum.c:31
const char * name
Definition: nkf.c:208
char ** argv
Definition: ruby.c:184

Definition at line 1154 of file enum.c.

◆ dont_recycle_block_arg

#define dont_recycle_block_arg (   arity)    ((arity) == 1 || (arity) < 0)

Definition at line 2303 of file enum.c.

Referenced by enum_each_cons(), and enum_each_slice().

◆ ENUM_WANT_SVALUE

#define ENUM_WANT_SVALUE ( )

◆ ENUMFUNC

#define ENUMFUNC (   name)    rb_block_given_p() ? name##_iter_i : name##_i

Definition at line 1152 of file enum.c.

Referenced by enum_all(), enum_any(), enum_none(), and enum_one().

◆ GETPTR

#define GETPTR (   i)    (beg+(i)*eltsize)

Referenced by nmin_filter().

◆ id_cmp

#define id_cmp   idCmp

◆ id_each

#define id_each   idEach

◆ id_eqq

#define id_eqq   idEqq

Definition at line 26 of file enum.c.

Referenced by grep_i(), grep_iter_i(), sliceafter_ii(), and slicebefore_ii().

◆ id_lshift

#define id_lshift   idLTLT

◆ rb_intern

#define rb_intern (   str)    rb_intern_const(str)

◆ SORT_BY_BUFSIZE

#define SORT_BY_BUFSIZE   16

Definition at line 976 of file enum.c.

Referenced by enum_sort_by(), and sort_by_i().

◆ SWAP

#define SWAP (   i,
 
)
Value:
do { \
VALUE tmp[2]; \
memcpy(tmp, GETPTR(i), sizeof(VALUE)*eltsize); \
memcpy(GETPTR(i), GETPTR(j), sizeof(VALUE)*eltsize); \
memcpy(GETPTR(j), tmp, sizeof(VALUE)*eltsize); \
} while (0)
#define GETPTR(i)
unsigned long VALUE
Definition: ruby.h:85

Referenced by nmin_filter().

◆ UPDATE_MEMO [1/2]

#define UPDATE_MEMO   ((void)(memo = MEMO_FOR(struct sliceafter_arg, _memo)))

Referenced by sliceafter_ii(), and slicewhen_ii().

◆ UPDATE_MEMO [2/2]

#define UPDATE_MEMO   ((void)(memo = MEMO_FOR(struct slicewhen_arg, _memo)))

Function Documentation

◆ ary_inject_op()

static VALUE ary_inject_op ( VALUE  ary,
VALUE  init,
VALUE  op 
)
static

◆ call_next()

static VALUE call_next ( VALUE v)
static

Definition at line 2521 of file enum.c.

References id_next, and rb_funcallv.

Referenced by zip_i().

◆ call_stop()

static VALUE call_stop ( VALUE v)
static

Definition at line 2527 of file enum.c.

References Qundef.

Referenced by zip_i().

◆ chunk_i()

static VALUE chunk_i ( RB_BLOCK_CALL_FUNC_ARGLIST(yielder, enumerator )
static

◆ chunk_ii()

static VALUE chunk_ii ( RB_BLOCK_CALL_FUNC_ARGLIST(i, _argp)  )
static

◆ collect_all()

static VALUE collect_all ( RB_BLOCK_CALL_FUNC_ARGLIST(i, ary)  )
static

Definition at line 470 of file enum.c.

References argc, argv, Qnil, rb_ary_push(), rb_enum_values_pack(), and rb_thread_check_ints().

Referenced by enum_to_a().

◆ collect_i()

static VALUE collect_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, ary)  )
static

Definition at line 462 of file enum.c.

References argc, argv, Qnil, rb_ary_push(), and rb_yield_values2().

Referenced by enum_collect().

◆ count_all_i()

static VALUE count_all_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, memop)  )
static

Definition at line 168 of file enum.c.

References MEMO::cnt, MEMO_CAST, Qnil, and MEMO::u3.

Referenced by enum_count().

◆ count_i()

static VALUE count_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, memop)  )
static

Definition at line 144 of file enum.c.

References MEMO::cnt, ENUM_WANT_SVALUE, MEMO_CAST, Qnil, rb_equal(), MEMO::u3, and MEMO::v1.

Referenced by enum_count().

◆ count_iter_i()

static VALUE count_iter_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, memop)  )
static

Definition at line 157 of file enum.c.

References argc, argv, MEMO::cnt, MEMO_CAST, Qnil, rb_yield_values2(), RTEST, and MEMO::u3.

Referenced by enum_count().

◆ cycle_i()

static VALUE cycle_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, ary)  )
static

Definition at line 2801 of file enum.c.

References argc, argv, sort_by_data::ary, ENUM_WANT_SVALUE, enum_yield(), Qnil, rb_ary_new_from_values(), and rb_ary_push().

Referenced by enum_cycle().

◆ DEFINE_ENUMFUNCS() [1/4]

DEFINE_ENUMFUNCS ( all  )

Definition at line 1172 of file enum.c.

References MEMO_V1_SET, Qfalse, Qnil, rb_iter_break(), result, and RTEST.

◆ DEFINE_ENUMFUNCS() [2/4]

DEFINE_ENUMFUNCS ( any  )

Definition at line 1207 of file enum.c.

References MEMO_V1_SET, Qnil, Qtrue, rb_iter_break(), result, and RTEST.

◆ DEFINE_ENUMFUNCS() [3/4]

DEFINE_ENUMFUNCS ( one  )

Definition at line 1242 of file enum.c.

References MEMO_V1_SET, Qfalse, Qnil, Qtrue, Qundef, rb_iter_break(), result, and RTEST.

◆ DEFINE_ENUMFUNCS() [4/4]

DEFINE_ENUMFUNCS ( none  )

Definition at line 1499 of file enum.c.

References MEMO_V1_SET, Qfalse, Qnil, rb_iter_break(), result, and RTEST.

◆ drop_i()

static VALUE drop_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, args)  )
static

Definition at line 2714 of file enum.c.

References argc, argv, MEMO::cnt, MEMO_CAST, Qnil, rb_ary_push(), rb_enum_values_pack(), MEMO::u3, and MEMO::v1.

Referenced by enum_drop().

◆ drop_while_i()

static VALUE drop_while_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, args)  )
static

Definition at line 2757 of file enum.c.

References argc, ENUM_WANT_SVALUE, enum_yield(), MEMO_CAST, Qnil, rb_ary_push(), RTEST, MEMO::state, TRUE, MEMO::u3, and MEMO::v1.

Referenced by enum_drop_while().

◆ each_cons_i()

static VALUE each_cons_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, args)  )
static

◆ each_slice_i()

static VALUE each_slice_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, m)  )
static

◆ each_val_i()

static VALUE each_val_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, p)  )
static

Definition at line 2259 of file enum.c.

References argc, ENUM_WANT_SVALUE, enum_yield(), and Qnil.

Referenced by enum_each_entry().

◆ each_with_index_i()

static VALUE each_with_index_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, memo)  )
static

Definition at line 2183 of file enum.c.

References argc, argv, INT2NUM, MEMO_CAST, rb_enum_values_pack(), and rb_yield_values().

Referenced by enum_each_with_index().

◆ each_with_object_i()

static VALUE each_with_object_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, memo)  )
static

Definition at line 2456 of file enum.c.

References ENUM_WANT_SVALUE, and rb_yield_values().

Referenced by enum_each_with_object().

◆ enum_all()

static VALUE enum_all ( VALUE  obj)
static

Definition at line 1200 of file enum.c.

References ENUMFUNC, id_each, MEMO_NEW, Qtrue, and rb_block_call().

Referenced by Init_Enumerable().

◆ enum_any()

static VALUE enum_any ( VALUE  obj)
static

Definition at line 1235 of file enum.c.

References ENUMFUNC, id_each, MEMO_NEW, Qfalse, and rb_block_call().

Referenced by Init_Enumerable().

◆ enum_chunk()

static VALUE enum_chunk ( VALUE  enumerable)
static

◆ enum_chunk_while()

static VALUE enum_chunk_while ( VALUE  enumerable)
static

◆ enum_collect()

static VALUE enum_collect ( VALUE  obj)
static

◆ enum_count()

static VALUE enum_count ( int  argc,
VALUE argv,
VALUE  obj 
)
static

◆ enum_cycle()

static VALUE enum_cycle ( int  argc,
VALUE argv,
VALUE  obj 
)
static

◆ enum_cycle_size()

static VALUE enum_cycle_size ( VALUE  self,
VALUE  args,
VALUE  eobj 
)
static

Definition at line 2811 of file enum.c.

References DBL2NUM, enum_size(), INFINITY, INT2FIX, LONG2FIX, mul, NUM2LONG, Qnil, RARRAY_AREF, RARRAY_LEN, rb_funcall(), and size.

Referenced by enum_cycle().

◆ enum_drop()

static VALUE enum_drop ( VALUE  obj,
VALUE  n 
)
static

Definition at line 2739 of file enum.c.

References drop_i(), id_each, len, MEMO_NEW, NUM2LONG, rb_ary_new(), rb_block_call(), rb_eArgError, rb_raise(), and result.

Referenced by Init_Enumerable().

◆ enum_drop_while()

static VALUE enum_drop_while ( VALUE  obj)
static

Definition at line 2788 of file enum.c.

References drop_while_i(), FALSE, id_each, MEMO_NEW, rb_ary_new(), rb_block_call(), result, and RETURN_ENUMERATOR.

Referenced by Init_Enumerable().

◆ enum_each_cons()

static VALUE enum_each_cons ( VALUE  obj,
VALUE  n 
)
static

◆ enum_each_cons_size()

static VALUE enum_each_cons_size ( VALUE  obj,
VALUE  args,
VALUE  eobj 
)
static

◆ enum_each_entry()

static VALUE enum_each_entry ( int  argc,
VALUE argv,
VALUE  obj 
)
static

Definition at line 2296 of file enum.c.

References each_val_i(), enum_size(), id_each, rb_block_call(), and RETURN_SIZED_ENUMERATOR.

Referenced by Init_Enumerable().

◆ enum_each_slice()

static VALUE enum_each_slice ( VALUE  obj,
VALUE  n 
)
static

◆ enum_each_slice_size()

static VALUE enum_each_slice_size ( VALUE  obj,
VALUE  args,
VALUE  eobj 
)
static

◆ enum_each_with_index()

static VALUE enum_each_with_index ( int  argc,
VALUE argv,
VALUE  obj 
)
static

Definition at line 2210 of file enum.c.

References each_with_index_i(), enum_size(), id_each, MEMO_NEW, rb_block_call(), and RETURN_SIZED_ENUMERATOR.

Referenced by Init_Enumerable().

◆ enum_each_with_object()

static VALUE enum_each_with_object ( VALUE  obj,
VALUE  memo 
)
static

Definition at line 2477 of file enum.c.

References each_with_object_i(), enum_size(), id_each, rb_block_call(), and RETURN_SIZED_ENUMERATOR.

Referenced by Init_Enumerable().

◆ enum_find()

static VALUE enum_find ( int  argc,
VALUE argv,
VALUE  obj 
)
static

◆ enum_find_all()

static VALUE enum_find_all ( VALUE  obj)
static

Definition at line 408 of file enum.c.

References enum_size(), find_all_i(), id_each, rb_ary_new(), rb_block_call(), and RETURN_SIZED_ENUMERATOR.

Referenced by Init_Enumerable().

◆ enum_find_index()

static VALUE enum_find_index ( int  argc,
VALUE argv,
VALUE  obj 
)
static

◆ enum_first()

static VALUE enum_first ( int  argc,
VALUE argv,
VALUE  obj 
)
static

Definition at line 931 of file enum.c.

References enum_take(), first_i(), id_each, MEMO_NEW, Qnil, rb_block_call(), and rb_check_arity.

Referenced by Init_Enumerable().

◆ enum_flat_map()

static VALUE enum_flat_map ( VALUE  obj)
static

Definition at line 545 of file enum.c.

References enum_size(), flat_map_i(), id_each, rb_ary_new(), rb_block_call(), and RETURN_SIZED_ENUMERATOR.

Referenced by Init_Enumerable().

◆ enum_grep()

static VALUE enum_grep ( VALUE  obj,
VALUE  pat 
)
static

Definition at line 107 of file enum.c.

References grep_i(), grep_iter_i(), id_each, MEMO_NEW, Qtrue, rb_ary_new(), rb_block_call(), and rb_block_given_p().

Referenced by Init_Enumerable().

◆ enum_grep_v()

static VALUE enum_grep_v ( VALUE  obj,
VALUE  pat 
)
static

Definition at line 133 of file enum.c.

References grep_i(), grep_iter_i(), id_each, MEMO_NEW, Qfalse, rb_ary_new(), rb_block_call(), and rb_block_given_p().

Referenced by Init_Enumerable().

◆ enum_group_by()

static VALUE enum_group_by ( VALUE  obj)
static

◆ enum_inject()

static VALUE enum_inject ( int  argc,
VALUE argv,
VALUE  obj 
)
static

◆ enum_max()

static VALUE enum_max ( int  argc,
VALUE argv,
VALUE  obj 
)
static

◆ enum_max_by()

static VALUE enum_max_by ( int  argc,
VALUE argv,
VALUE  obj 
)
static

◆ enum_member()

static VALUE enum_member ( VALUE  obj,
VALUE  val 
)
static

Definition at line 2174 of file enum.c.

References id_each, member_i(), MEMO_NEW, Qfalse, and rb_block_call().

Referenced by Init_Enumerable().

◆ enum_min()

static VALUE enum_min ( int  argc,
VALUE argv,
VALUE  obj 
)
static

◆ enum_min_by()

static VALUE enum_min_by ( int  argc,
VALUE argv,
VALUE  obj 
)
static

◆ enum_minmax()

static VALUE enum_minmax ( VALUE  obj)
static

◆ enum_minmax_by()

static VALUE enum_minmax_by ( VALUE  obj)
static

◆ enum_none()

static VALUE enum_none ( VALUE  obj)
static

Definition at line 1525 of file enum.c.

References ENUMFUNC, id_each, MEMO_NEW, Qtrue, and rb_block_call().

Referenced by Init_Enumerable().

◆ enum_one()

static VALUE enum_one ( VALUE  obj)
static

Definition at line 1488 of file enum.c.

References ENUMFUNC, id_each, MEMO_NEW, one(), Qfalse, Qundef, rb_block_call(), and result.

Referenced by Init_Enumerable().

◆ enum_partition()

static VALUE enum_partition ( VALUE  obj)
static

◆ enum_reject()

static VALUE enum_reject ( VALUE  obj)
static

Definition at line 449 of file enum.c.

References enum_size(), id_each, rb_ary_new(), rb_block_call(), reject_i(), and RETURN_SIZED_ENUMERATOR.

Referenced by Init_Enumerable().

◆ enum_reverse_each()

static VALUE enum_reverse_each ( int  argc,
VALUE argv,
VALUE  obj 
)
static

◆ enum_size()

static VALUE enum_size ( VALUE  self,
VALUE  args,
VALUE  eobj 
)
static

◆ enum_size_over_p()

static int enum_size_over_p ( VALUE  obj,
long  n 
)
static

Definition at line 380 of file enum.c.

References FIX2ULONG, FIXNUM_P, id_size, rb_check_funcall(), and size.

Referenced by enum_each_cons().

◆ enum_slice_after()

static VALUE enum_slice_after ( int  argc,
VALUE argv,
VALUE  enumerable 
)
static

◆ enum_slice_before()

static VALUE enum_slice_before ( int  argc,
VALUE argv,
VALUE  enumerable 
)
static

◆ enum_slice_when()

static VALUE enum_slice_when ( VALUE  enumerable)
static

◆ enum_sort()

static VALUE enum_sort ( VALUE  obj)
static

Definition at line 971 of file enum.c.

References enum_to_a(), and rb_ary_sort_bang().

Referenced by Init_Enumerable().

◆ enum_sort_by()

static VALUE enum_sort_by ( VALUE  obj)
static

◆ enum_sum()

static VALUE enum_sum ( int  argc,
VALUE argv,
VALUE  obj 
)
static

◆ enum_sum_i()

static VALUE enum_sum_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, args)  )
static

Definition at line 3722 of file enum.c.

References ENUM_WANT_SVALUE, Qnil, and sum_iter().

Referenced by enum_sum().

◆ enum_take()

static VALUE enum_take ( VALUE  obj,
VALUE  n 
)
static

Definition at line 2661 of file enum.c.

References id_each, len, MEMO_NEW, NUM2LONG, rb_ary_new2, rb_block_call(), rb_eArgError, rb_raise(), result, and take_i().

Referenced by enum_first(), and first_i().

◆ enum_take_while()

static VALUE enum_take_while ( VALUE  obj)
static

Definition at line 2703 of file enum.c.

References sort_by_data::ary, id_each, rb_ary_new(), rb_block_call(), RETURN_ENUMERATOR, and take_while_i().

Referenced by Init_Enumerable().

◆ enum_to_a()

static VALUE enum_to_a ( int  argc,
VALUE argv,
VALUE  obj 
)
static

Definition at line 571 of file enum.c.

References collect_all(), id_each, OBJ_INFECT, rb_ary_new(), and rb_block_call().

Referenced by enum_reverse_each(), enum_sort(), and Init_Enumerable().

◆ enum_to_h()

static VALUE enum_to_h ( int  argc,
VALUE argv,
VALUE  obj 
)
static

Definition at line 612 of file enum.c.

References enum_to_h_i(), hash(), id_each, OBJ_INFECT, rb_block_call(), and rb_hash_new().

Referenced by Init_Enumerable().

◆ enum_to_h_i()

static VALUE enum_to_h_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, hash )
static

◆ enum_uniq()

static VALUE enum_uniq ( VALUE  obj)
static

◆ enum_yield()

static VALUE enum_yield ( int  argc,
VALUE  ary 
)
static

◆ enum_yield_array()

static VALUE enum_yield_array ( VALUE  ary)
static

Definition at line 53 of file enum.c.

References len, RARRAY_AREF, RARRAY_LEN, rb_yield(), rb_yield_lambda(), and rb_yield_values2().

Referenced by enum_cycle(), zip_ary(), and zip_i().

◆ enum_zip()

static VALUE enum_zip ( int  argc,
VALUE argv,
VALUE  obj 
)
static

◆ find_all_i()

static VALUE find_all_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, ary)  )
static

Definition at line 351 of file enum.c.

References argc, ENUM_WANT_SVALUE, enum_yield(), Qnil, rb_ary_push(), and RTEST.

Referenced by enum_find_all().

◆ find_i()

static VALUE find_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, memop)  )
static

Definition at line 223 of file enum.c.

References argc, MEMO::cnt, ENUM_WANT_SVALUE, enum_yield(), MEMO_CAST, MEMO_V1_SET, Qnil, rb_iter_break(), RTEST, and MEMO::u3.

Referenced by enum_find().

◆ find_index_i()

static VALUE find_index_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, memop)  )
static

◆ find_index_iter_i()

static VALUE find_index_iter_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, memop)  )
static

Definition at line 295 of file enum.c.

References argc, argv, MEMO::cnt, MEMO_CAST, MEMO_V1_SET, Qnil, rb_iter_break(), rb_yield_values2(), RTEST, MEMO::u3, and UINT2NUM.

Referenced by enum_find_index().

◆ first_i()

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

Definition at line 900 of file enum.c.

References enum_take(), ENUM_WANT_SVALUE, MEMO_CAST, MEMO_V1_SET, rb_iter_break(), and UNREACHABLE.

Referenced by enum_first().

◆ flat_map_i()

static VALUE flat_map_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, ary)  )
static

Definition at line 511 of file enum.c.

References argc, argv, NIL_P, Qnil, rb_ary_concat(), rb_ary_push(), rb_check_array_type(), and rb_yield_values2().

Referenced by enum_flat_map().

◆ grep_i()

static VALUE grep_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, args)  )
static

Definition at line 65 of file enum.c.

References ENUM_WANT_SVALUE, id_eqq, MEMO_CAST, Qnil, rb_ary_push(), rb_funcall(), RTEST, MEMO::u3, MEMO::v1, MEMO::v2, and MEMO::value.

Referenced by enum_grep(), and enum_grep_v().

◆ grep_iter_i()

static VALUE grep_iter_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, args)  )
static

◆ group_by_i()

static VALUE group_by_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, hash )
static

◆ hash_sum()

static void hash_sum ( VALUE  hash,
struct enum_sum_memo memo 
)
static

Definition at line 3737 of file enum.c.

References assert, hash_sum_i(), NULL, rb_hash_foreach(), RB_TYPE_P, and T_HASH.

Referenced by enum_sum().

◆ hash_sum_i()

static int hash_sum_i ( VALUE  key,
VALUE  value,
VALUE  arg 
)
static

Definition at line 3730 of file enum.c.

References rb_assoc_new(), ST_CONTINUE, and sum_iter().

Referenced by hash_sum().

◆ Init_Enumerable()

void Init_Enumerable ( void  )

◆ inject_i()

static VALUE inject_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, p)  )
static

Definition at line 621 of file enum.c.

References ENUM_WANT_SVALUE, MEMO_CAST, MEMO_V1_SET, Qnil, Qundef, rb_yield_values(), and MEMO::v1.

Referenced by enum_inject().

◆ inject_op_i()

static VALUE inject_op_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, p)  )
static

◆ int_range_sum()

static VALUE int_range_sum ( VALUE  beg,
VALUE  end,
int  excl,
VALUE  init 
)
static

◆ limit_by_enum_size()

static long limit_by_enum_size ( VALUE  obj,
long  n 
)
static

Definition at line 370 of file enum.c.

References FIX2ULONG, FIXNUM_P, id_size, rb_check_funcall(), and size.

Referenced by enum_each_slice().

◆ max_by_i()

static VALUE max_by_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, args)  )
static

◆ max_i()

static VALUE max_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, args)  )
static

Definition at line 1633 of file enum.c.

References max_t::cmp_opt, ENUM_WANT_SVALUE, max_t::max, MEMO_FOR, OPTIMIZED_CMP, Qnil, and Qundef.

Referenced by enum_max().

◆ max_ii()

static VALUE max_ii ( RB_BLOCK_CALL_FUNC_ARGLIST(i, args)  )
static

Definition at line 1651 of file enum.c.

References cmp(), ENUM_WANT_SVALUE, max_t::max, MEMO_FOR, Qnil, Qundef, rb_cmpint(), and rb_yield_values().

Referenced by enum_max().

◆ member_i()

static VALUE member_i ( RB_BLOCK_CALL_FUNC_ARGLIST(iter, args)  )
static

Definition at line 2147 of file enum.c.

References argc, argv, MEMO_CAST, MEMO_V2_SET, Qnil, Qtrue, rb_enum_values_pack(), rb_equal(), rb_iter_break(), and MEMO::v1.

Referenced by enum_member().

◆ min_by_i()

static VALUE min_by_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, args)  )
static

◆ min_i()

static VALUE min_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, args)  )
static

Definition at line 1538 of file enum.c.

References min_t::cmp_opt, ENUM_WANT_SVALUE, MEMO_FOR, min_t::min, OPTIMIZED_CMP, Qnil, and Qundef.

Referenced by enum_min().

◆ min_ii()

static VALUE min_ii ( RB_BLOCK_CALL_FUNC_ARGLIST(i, args)  )
static

Definition at line 1556 of file enum.c.

References cmp(), ENUM_WANT_SVALUE, MEMO_FOR, min_t::min, Qnil, Qundef, rb_cmpint(), and rb_yield_values().

Referenced by enum_min().

◆ minmax_by_i()

static VALUE minmax_by_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, _memo)  )
static

◆ minmax_by_i_update()

static void minmax_by_i_update ( VALUE  v1,
VALUE  v2,
VALUE  i1,
VALUE  i2,
struct minmax_by_t memo 
)
static

◆ minmax_i()

static VALUE minmax_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, _memo)  )
static

◆ minmax_i_update()

static void minmax_i_update ( VALUE  i,
VALUE  j,
struct minmax_t memo 
)
static

Definition at line 1729 of file enum.c.

References minmax_t::cmp_opt, minmax_t::max, minmax_t::min, sort_by_data::n, OPTIMIZED_CMP, and Qundef.

Referenced by enum_minmax(), and minmax_i().

◆ minmax_ii()

static VALUE minmax_ii ( RB_BLOCK_CALL_FUNC_ARGLIST(i, _memo)  )
static

◆ minmax_ii_update()

static void minmax_ii_update ( VALUE  i,
VALUE  j,
struct minmax_t memo 
)
static

Definition at line 1781 of file enum.c.

References minmax_t::max, minmax_t::min, sort_by_data::n, Qundef, rb_cmpint(), and rb_yield_values().

Referenced by enum_minmax(), and minmax_ii().

◆ nmin_block_cmp()

static int nmin_block_cmp ( const void *  ap,
const void *  bp,
void *  _data 
)
static

◆ nmin_cmp()

static int nmin_cmp ( const void *  ap,
const void *  bp,
void *  _data 
)
static

Definition at line 1269 of file enum.c.

References bp, nmin_data::buf, cmp(), id_cmp, nmin_data::method, rb_cmpint(), rb_eRuntimeError, rb_funcall(), rb_raise(), and RBASIC.

Referenced by rb_nmin_run().

◆ nmin_filter()

static void nmin_filter ( struct nmin_data data)
static

◆ nmin_i()

static VALUE nmin_i ( VALUE  i,
VALUE _data,
int  argc,
VALUE argv 
)
static

◆ partition_i()

static VALUE partition_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, arys)  )
static

Definition at line 806 of file enum.c.

References argc, ENUM_WANT_SVALUE, enum_yield(), MEMO_CAST, Qnil, rb_ary_push(), RTEST, MEMO::v1, and MEMO::v2.

Referenced by enum_partition().

◆ rb_enum_values_pack()

VALUE rb_enum_values_pack ( int  argc,
const VALUE argv 
)

◆ rb_nmin_run()

VALUE rb_nmin_run ( VALUE  obj,
VALUE  num,
int  by,
int  rev,
int  ary 
)

◆ reject_i()

static VALUE reject_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, ary)  )
static

Definition at line 421 of file enum.c.

References argc, ENUM_WANT_SVALUE, enum_yield(), Qnil, rb_ary_push(), and RTEST.

Referenced by enum_reject().

◆ sliceafter_i()

static VALUE sliceafter_i ( RB_BLOCK_CALL_FUNC_ARGLIST(yielder, enumerator )
static

◆ sliceafter_ii()

static VALUE sliceafter_ii ( RB_BLOCK_CALL_FUNC_ARGLIST(i, _memo)  )
static

◆ slicebefore_i()

static VALUE slicebefore_i ( RB_BLOCK_CALL_FUNC_ARGLIST(yielder, enumerator )
static

◆ slicebefore_ii()

static VALUE slicebefore_ii ( RB_BLOCK_CALL_FUNC_ARGLIST(i, _argp)  )
static

◆ slicewhen_i()

static VALUE slicewhen_i ( RB_BLOCK_CALL_FUNC_ARGLIST(yielder, enumerator )
static

◆ slicewhen_ii()

static VALUE slicewhen_ii ( RB_BLOCK_CALL_FUNC_ARGLIST(i, _memo)  )
static

◆ sort_by_cmp()

static int sort_by_cmp ( const void *  ap,
const void *  bp,
void *  data 
)
static

Definition at line 1012 of file enum.c.

References sort_by_data::ary, id_cmp, rb_cmpint(), rb_eRuntimeError, rb_funcall(), rb_raise(), and RBASIC.

Referenced by enum_sort_by().

◆ sort_by_i()

static VALUE sort_by_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, _data)  )
static

◆ sum_iter()

static void sum_iter ( VALUE  i,
struct enum_sum_memo memo 
)
static

◆ take_i()

static VALUE take_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, args)  )
static

Definition at line 2640 of file enum.c.

References argc, argv, MEMO::cnt, MEMO_CAST, Qnil, rb_ary_push(), rb_enum_values_pack(), rb_iter_break(), MEMO::u3, and MEMO::v1.

Referenced by enum_take().

◆ take_while_i()

static VALUE take_while_i ( RB_BLOCK_CALL_FUNC_ARGLIST(i, ary)  )
static

◆ uniq_func()

static VALUE uniq_func ( RB_BLOCK_CALL_FUNC_ARGLIST(i, hash )
static

Definition at line 3848 of file enum.c.

References ENUM_WANT_SVALUE, hash(), Qnil, and rb_hash_add_new_element().

Referenced by enum_uniq().

◆ uniq_iter()

static VALUE uniq_iter ( RB_BLOCK_CALL_FUNC_ARGLIST(i, hash )
static

Definition at line 3856 of file enum.c.

References argc, argv, ENUM_WANT_SVALUE, hash(), Qnil, rb_hash_add_new_element(), and rb_yield_values2().

Referenced by enum_uniq().

◆ zip_ary()

static VALUE zip_ary ( RB_BLOCK_CALL_FUNC_ARGLIST(val, memoval)  )
static

◆ zip_i()

static VALUE zip_i ( RB_BLOCK_CALL_FUNC_ARGLIST(val, memoval)  )
static

Variable Documentation

◆ id_call

ID id_call
static

Definition at line 22 of file enum.c.

Referenced by chunk_ii(), enum_find(), Init_Enumerable(), sliceafter_ii(), slicebefore_ii(), and slicewhen_ii().

◆ id_div

ID id_div
static

Definition at line 21 of file enum.c.

Referenced by enum_each_slice_size(), and Init_Enumerable().

◆ id_next

ID id_next
static

Definition at line 20 of file enum.c.

Referenced by call_next(), and Init_Enumerable().

◆ id_size

ID id_size
static

Definition at line 23 of file enum.c.

Referenced by enum_size(), enum_size_over_p(), Init_Enumerable(), and limit_by_enum_size().

◆ rb_mEnumerable

VALUE rb_mEnumerable