29 #define ARY_DEFAULT_SIZE 16 30 #define ARY_MAX_SIZE (LONG_MAX / (int)sizeof(VALUE)) 32 # define ARY_SHARED_P(ary) \ 33 (assert(!FL_TEST((ary), ELTS_SHARED) || !FL_TEST((ary), RARRAY_EMBED_FLAG)), \ 34 FL_TEST((ary),ELTS_SHARED)!=0) 35 # define ARY_EMBED_P(ary) \ 36 (assert(!FL_TEST((ary), ELTS_SHARED) || !FL_TEST((ary), RARRAY_EMBED_FLAG)), \ 37 FL_TEST((ary), RARRAY_EMBED_FLAG)!=0) 39 #define ARY_HEAP_PTR(a) (assert(!ARY_EMBED_P(a)), RARRAY(a)->as.heap.ptr) 40 #define ARY_HEAP_LEN(a) (assert(!ARY_EMBED_P(a)), RARRAY(a)->as.heap.len) 41 #define ARY_EMBED_PTR(a) (assert(ARY_EMBED_P(a)), RARRAY(a)->as.ary) 42 #define ARY_EMBED_LEN(a) \ 43 (assert(ARY_EMBED_P(a)), \ 44 (long)((RBASIC(a)->flags >> RARRAY_EMBED_LEN_SHIFT) & \ 45 (RARRAY_EMBED_LEN_MASK >> RARRAY_EMBED_LEN_SHIFT))) 46 #define ARY_HEAP_SIZE(a) (assert(!ARY_EMBED_P(a)), assert(ARY_OWNS_HEAP_P(a)), RARRAY(a)->as.heap.aux.capa * sizeof(VALUE)) 48 #define ARY_OWNS_HEAP_P(a) (!FL_TEST((a), ELTS_SHARED|RARRAY_EMBED_FLAG)) 49 #define FL_SET_EMBED(a) do { \ 50 assert(!ARY_SHARED_P(a)); \ 51 FL_SET((a), RARRAY_EMBED_FLAG); \ 53 #define FL_UNSET_EMBED(ary) FL_UNSET((ary), RARRAY_EMBED_FLAG|RARRAY_EMBED_LEN_MASK) 54 #define FL_SET_SHARED(ary) do { \ 55 assert(!ARY_EMBED_P(ary)); \ 56 FL_SET((ary), ELTS_SHARED); \ 58 #define FL_UNSET_SHARED(ary) FL_UNSET((ary), ELTS_SHARED) 60 #define ARY_SET_PTR(ary, p) do { \ 61 assert(!ARY_EMBED_P(ary)); \ 62 assert(!OBJ_FROZEN(ary)); \ 63 RARRAY(ary)->as.heap.ptr = (p); \ 65 #define ARY_SET_EMBED_LEN(ary, n) do { \ 67 assert(ARY_EMBED_P(ary)); \ 68 assert(!OBJ_FROZEN(ary)); \ 69 RBASIC(ary)->flags &= ~RARRAY_EMBED_LEN_MASK; \ 70 RBASIC(ary)->flags |= (tmp_n) << RARRAY_EMBED_LEN_SHIFT; \ 72 #define ARY_SET_HEAP_LEN(ary, n) do { \ 73 assert(!ARY_EMBED_P(ary)); \ 74 RARRAY(ary)->as.heap.len = (n); \ 76 #define ARY_SET_LEN(ary, n) do { \ 77 if (ARY_EMBED_P(ary)) { \ 78 ARY_SET_EMBED_LEN((ary), (n)); \ 81 ARY_SET_HEAP_LEN((ary), (n)); \ 83 assert(RARRAY_LEN(ary) == (n)); \ 85 #define ARY_INCREASE_PTR(ary, n) do { \ 86 assert(!ARY_EMBED_P(ary)); \ 87 assert(!OBJ_FROZEN(ary)); \ 88 RARRAY(ary)->as.heap.ptr += (n); \ 90 #define ARY_INCREASE_LEN(ary, n) do { \ 91 assert(!OBJ_FROZEN(ary)); \ 92 if (ARY_EMBED_P(ary)) { \ 93 ARY_SET_EMBED_LEN((ary), RARRAY_LEN(ary)+(n)); \ 96 RARRAY(ary)->as.heap.len += (n); \ 100 #define ARY_CAPA(ary) (ARY_EMBED_P(ary) ? RARRAY_EMBED_LEN_MAX : \ 101 ARY_SHARED_ROOT_P(ary) ? RARRAY_LEN(ary) : RARRAY(ary)->as.heap.aux.capa) 102 #define ARY_SET_CAPA(ary, n) do { \ 103 assert(!ARY_EMBED_P(ary)); \ 104 assert(!ARY_SHARED_P(ary)); \ 105 assert(!OBJ_FROZEN(ary)); \ 106 RARRAY(ary)->as.heap.aux.capa = (n); \ 109 #define ARY_SHARED(ary) (assert(ARY_SHARED_P(ary)), RARRAY(ary)->as.heap.aux.shared) 110 #define ARY_SET_SHARED(ary, value) do { \ 111 const VALUE _ary_ = (ary); \ 112 const VALUE _value_ = (value); \ 113 assert(!ARY_EMBED_P(_ary_)); \ 114 assert(ARY_SHARED_P(_ary_)); \ 115 assert(ARY_SHARED_ROOT_P(_value_)); \ 116 RB_OBJ_WRITE(_ary_, &RARRAY(_ary_)->as.heap.aux.shared, _value_); \ 118 #define RARRAY_SHARED_ROOT_FLAG FL_USER5 119 #define ARY_SHARED_ROOT_P(ary) (FL_TEST((ary), RARRAY_SHARED_ROOT_FLAG)) 120 #define ARY_SHARED_NUM(ary) \ 121 (assert(ARY_SHARED_ROOT_P(ary)), RARRAY(ary)->as.heap.aux.capa) 122 #define ARY_SHARED_OCCUPIED(ary) (ARY_SHARED_NUM(ary) == 1) 123 #define ARY_SET_SHARED_NUM(ary, value) do { \ 124 assert(ARY_SHARED_ROOT_P(ary)); \ 125 RARRAY(ary)->as.heap.aux.capa = (value); \ 127 #define FL_SET_SHARED_ROOT(ary) do { \ 128 assert(!ARY_EMBED_P(ary)); \ 129 FL_SET((ary), RARRAY_SHARED_ROOT_FLAG); \ 132 #define ARY_SET(a, i, v) RARRAY_ASET((assert(!ARY_SHARED_P(a)), (a)), (i), (v)) 173 if (argc > (
int)(128/
sizeof(
VALUE)) ) {
182 for (i=0; i<
argc; i++) {
225 if (len > capacity) len = capacity;
238 long old_capa =
RARRAY(ary)->as.heap.aux.capa;
240 assert(old_capa >= capacity);
241 if (old_capa > capacity)
357 long new_len = old_len + add_len;
375 if (new_len > capa - (capa >> 6)) {
385 if (new_len > capa) {
435 RARRAY(ary1)->as.heap.aux.shared ==
RARRAY(ary2)->as.heap.aux.shared &&
436 RARRAY(ary1)->as.heap.len ==
RARRAY(ary2)->as.heap.len) {
508 for (i=0; i<n; i++) {
558 return RARRAY(ary)->as.heap.aux.capa *
sizeof(
VALUE);
602 return (
VALUE)shared;
764 rb_warn(
"block supersedes default value argument");
766 for (i=0; i<
len; i++) {
790 if (argc > 0 && argv) {
954 if (n == 0)
return Qnil;
1006 if (len == 0)
return Qnil;
1068 setup_occupied_shared:
1081 goto setup_occupied_shared;
1093 long new_len = len +
argc;
1095 const VALUE *head, *sharedp;
1107 goto makeroom_if_need;
1113 if (capa - (capa >> 6) <= new_len) {
1126 if (head - sharedp < argc) {
1129 room = capa - new_len;
1132 head = sharedp + argc + room;
1188 if (len == 0)
return Qnil;
1189 if (offset < 0 || len <= offset) {
1200 if (len == 0)
return Qnil;
1203 if (offset < 0)
return Qnil;
1205 else if (len <= offset) {
1217 if (beg > alen)
return Qnil;
1218 if (beg < 0 || len < 0)
return Qnil;
1220 if (alen < len || alen < beg + len) {
1224 if (len == 0)
return ary_new(klass, 0);
1365 if (len == 0)
return Qnil;
1406 if (block_given && argc == 2) {
1407 rb_warn(
"block supersedes default value argument");
1415 if (block_given)
return rb_yield(pos);
1470 rb_warn(
"given block not used");
1473 for (i=0; i<
len; i++) {
1534 rb_warn(
"given block not used");
1559 if (!
NIL_P(tmp))
return tmp;
1578 if (olen < len || olen < beg + len) {
1584 rofs = (rptr >= optr && rptr < optr + olen) ? rptr - optr : -1;
1608 alen = olen + rlen -
len;
1615 MEMMOVE(ptr + beg + rlen, ptr + beg + len,
1616 VALUE, olen - (beg + len)));
1635 if (len > (capa = (
long)
ARY_CAPA(ary))) {
1636 rb_bug(
"probable buffer overflow: %ld for %ld", len, capa);
1656 if (len == olen)
return ary;
1725 long offset, beg,
len;
1746 return argv[argc-1];
1779 if (argc == 1)
return ary;
1952 VALUE result = arg[2];
1953 int *first = (
int *)arg[3];
1971 for (i=0; i<
max; i++) {
1973 if (i > 0 && !
NIL_P(sep))
1986 if (i > 0 && !
NIL_P(sep))
2007 args[3] = (
VALUE)first;
2051 if (
NIL_P(tmp) || tmp != val) {
2058 ary_join_1(ary, ary, sep, i, result, &first);
2179 if (
NIL_P(key_value_pair)) {
2267 do *p2-- = *p1++;
while (--len > 0);
2276 return (cnt < 0) ? (len - (~cnt %
len) - 1) : (cnt %
len);
2382 if (
RBASIC(ary)->klass) {
2411 if ((
long)a > (long)b)
return 1;
2412 if ((
long)a < (long)b)
return -1;
2605 return index_result;
2625 int smaller = 0, satisfied = 0;
2629 while (low < high) {
2630 mid = low + ((high - low) / 2);
2637 else if (v ==
Qtrue) {
2648 case 1: smaller = 1;
break;
2649 case -1: smaller = 0;
2654 " (must be numeric, true, false or nil)",
2664 if (!satisfied)
return Qnil;
2778 long beg,
len, i, j;
2780 for (i=0; i<
argc; i++) {
2787 long end = olen < beg+len ? olen : beg+
len;
2788 for (j = beg; j < end; j++) {
2871 for (i1 = i2 = 0; i1 <
RARRAY_LEN(ary); arg->
len[0] = ++i1) {
2879 return (i1 == i2) ?
Qnil :
ary;
2888 long i1 = arg->
len[0], i2 = arg->
len[1];
2890 if (i2 < len && i2 < i1) {
2930 args.
len[0] = args.
len[1] = 0;
2997 for (i1 = i2 = 0; i1 <
RARRAY_LEN(ary); i1++) {
3026 for (i1 = i2 = 0; i1 <
RARRAY_LEN(ary); i1++) {
3050 if (pos >= len)
return Qnil;
3053 if (pos < 0)
return Qnil;
3112 long pos,
len, orig_len;
3119 if (len < 0)
return Qnil;
3123 if (pos < 0)
return Qnil;
3125 else if (orig_len < pos)
return Qnil;
3126 if (orig_len < pos + len) {
3127 len = orig_len - pos;
3146 goto delete_pos_len;
3180 for (i1 = i2 = 0; i1 <
RARRAY_LEN(ary); arg->
len[0] = ++i1) {
3188 return (i1 == i2) ?
Qnil :
ary;
3198 args.
len[0] = args.
len[1] = 0;
3245 return rejected_ary;
3331 for (i=0; i<
argc; i++) {
3345 for (j=0; j<
argc; j++) {
3358 for (j=0; j<
argc; j++) {
3368 for (i=0; i<
len; i++) {
3372 for (j=0; j<
argc; j++) {
3398 long elen = -1, alen, i, j;
3399 VALUE tmp, result = 0;
3403 for (i=0; i<alen; i++) {
3408 for (j=0; j<elen; j++) {
3416 for (j=0; j<elen; j++) {
3441 if (copy == orig)
return copy;
3537 long beg = 0, end = 0,
len = 0;
3560 if (beg < 0) beg = 0;
3585 for (i=beg; i<end; i++) {
3624 long len, xlen, ylen;
3676 for (i = 0; i <
argc; i++) {
3740 while (t <= len/2) {
3827 const VALUE *p1, *p2;
3829 if (recur)
return Qtrue;
3835 for (i = 0; i < len1; i++) {
3873 if (ary1 == ary2)
return Qtrue;
3890 if (recur)
return Qtrue;
3909 if (ary1 == ary2)
return Qtrue;
3982 if (recur)
return Qundef;
3987 for (i=0; i<
len; i++) {
4035 if (ary1 == ary2)
return INT2FIX(0);
4037 if (v !=
Qundef)
return v;
4039 if (len == 0)
return INT2FIX(0);
4040 if (len > 0)
return INT2FIX(1);
4094 if (
RHASH(hash)->ntbl) {
4096 RHASH(hash)->ntbl = 0;
4183 *key = *value = (
VALUE)arg;
4534 rb_warn(
"given block not used");
4561 if (level >= 0 &&
RARRAY_LEN(stack) / 2 >= level) {
4566 if (
RBASIC(result)->klass) {
4683 #define OPTHASH_GIVEN_P(opts) \ 4684 (argc > 0 && !NIL_P((opts) = rb_check_hash_type(argv[argc-1])) && (--argc, 1)) 4687 #define RAND_UPTO(max) (long)rb_random_ulong_limited((randgen), (max)-1) 4794 long n,
len, i, j, k, idx[10];
4819 if (n > len) n =
len;
4821 for (i = 0; i < n; ++i) {
4827 if (len < k && n <=
numberof(idx)) {
4828 for (i = 0; i < n; ++i) {
4832 if (n > len) n =
len;
4850 if (j >= i) l = i, g = ++j;
4851 if (k >= l && (++k >= g)) ++k;
4857 sorted[0] = idx[0] = rnds[0];
4858 for (i=1; i<n; i++) {
4860 for (j = 0; j < i; ++j) {
4861 if (k < sorted[j])
break;
4864 memmove(&sorted[j+1], &sorted[j],
sizeof(sorted[0])*(i-j));
4865 sorted[j] = idx[i] = k;
4869 for (i=0; i<n; i++) {
4879 for (i=0; i<n; i++) {
4882 ptr_result[j] = ptr_result[i];
4904 if (mul <= 0)
return INT2FIX(0);
4943 if (n <= 0)
return Qnil;
4946 while (
RARRAY_LEN(ary) > 0 && (n < 0 || 0 < n--)) {
4954 #define tmpbuf(n, size) rb_str_tmp_new((n)*(size)) 4955 #define tmpbuf_discard(s) (rb_str_resize((s), 0L), RBASIC_SET_CLASS_RAW(s, rb_cString)) 4956 #define tmpary(n) rb_ary_tmp_new(n) 4957 #define tmpary_discard(a) (ary_discard(a), RBASIC_SET_CLASS_RAW(a, rb_cArray)) 4972 for (i = 0; i < r; i++) result_array[i] = values_array[p[i]];
4975 return !
RBASIC(values)->klass;
4991 permute0(
const long n,
const long r,
long *
const p,
char *
const used,
const VALUE values)
4993 long i = 0, index = 0;
4996 const char *
const unused = memchr(&used[i], 0, n-i);
5011 for (i = 0; i < n; ++i) {
5012 if (used[i])
continue;
5033 while (how_many-- > 0) {
5044 if (comb > size-comb) {
5103 if (r < 0 || n < r) {
5117 char *used = (
char*)(p + r);
5138 for (lev++; lev < n; lev++) {
5139 stack[lev+1] = stack[lev]+1;
5145 if (lev == 0)
return;
5147 }
while (stack[lev+1]+n == len+lev+1);
5193 if (n < 0 || len < n) {
5207 long *stack =
ALLOCV_N(
long, t0, n+1);
5232 long i = 0, index = 0;
5236 if (++index < r-1) {
5240 for (i = 0; i < n; ++i) {
5247 if (index <= 0)
return;
5248 }
while ((i = ++p[--index]) >= n);
5326 long i = 0, index = 0;
5330 if (++index < r-1) {
5334 for (; i < n; ++i) {
5341 if (index <= 0)
return;
5342 }
while ((i = ++p[--index]) >= n);
5403 else if (len == 0) {
5458 for (i = 1; i < n; i++) arrays[i] =
Qnil;
5459 for (i = 1; i < n; i++) arrays[i] =
to_ary(argv[i-1]);
5462 for (i = 0; i < n; i++) counters[i] = 0;
5467 for (i = 0; i < n; i++) {
5474 for (i = 0; i < n; i++) {
5490 for (j = 0; j < n; j++) {
5495 if (
NIL_P(result)) {
5515 while (counters[m] ==
RARRAY_LEN(arrays[m])) {
5518 if (--m < 0)
goto done;
5689 if (!--argc)
return self;
5810 goto has_float_value;
5829 if (fabs(f) >= fabs(x))
5842 goto has_some_value;
6095 #define rb_intern(str) rb_intern_const(str) static void rb_ary_splice(VALUE ary, long beg, long len, const VALUE *rptr, long rlen)
static VALUE rb_ary_transpose(VALUE ary)
#define RBASIC_CLEAR_CLASS(obj)
static VALUE take_i(RB_BLOCK_CALL_FUNC_ARGLIST(val, cbarg))
static void ary_reverse(VALUE *p1, VALUE *p2)
static VALUE recursive_cmp(VALUE ary1, VALUE ary2, int recur)
VALUE rb_ary_unshift(VALUE ary, VALUE item)
static void ary_join_1(VALUE obj, VALUE ary, VALUE sep, long i, VALUE result, int *first)
VALUE rb_ary_last(int argc, const VALUE *argv, VALUE ary)
static VALUE ary_reject(VALUE orig, VALUE result)
VALUE rb_ary_pop(VALUE ary)
VALUE rb_ary_entry(VALUE ary, long offset)
void rb_bug(const char *fmt,...)
VALUE rb_ary_new_capa(long capa)
static VALUE rb_ary_keep_if(VALUE ary)
static VALUE rb_ary_concat_multi(int argc, VALUE *argv, VALUE ary)
void rb_enc_copy(VALUE obj1, VALUE obj2)
VALUE rb_ary_freeze(VALUE ary)
static VALUE rb_ary_times(VALUE ary, VALUE times)
static VALUE rb_ary_drop_while(VALUE ary)
static VALUE rb_ary_s_create(int argc, VALUE *argv, VALUE klass)
#define ARY_SET_EMBED_LEN(ary, n)
VALUE rb_yield_values(int n,...)
VALUE rb_check_block_call(VALUE, ID, int, const VALUE *, rb_block_call_func_t, VALUE)
#define RB_OBJ_WRITTEN(a, oldv, b)
static int max(int a, int b)
static unsigned int hash(str, len) register const char *str
void rb_define_singleton_method(VALUE obj, const char *name, VALUE(*func)(ANYARGS), int argc)
Defines a singleton method for obj.
static VALUE rb_ary_combination(VALUE ary, VALUE num)
VALUE rb_ary_sort(VALUE ary)
#define rb_usascii_str_new2
VALUE rb_ary_subseq(VALUE ary, long beg, long len)
static VALUE rb_ary_sample(int argc, VALUE *argv, VALUE ary)
static VALUE rb_ary_compact(VALUE ary)
static void ary_mem_clear(VALUE ary, long beg, long size)
VALUE rb_ary_delete_at(VALUE ary, long pos)
int rb_get_kwargs(VALUE keyword_hash, const ID *table, int required, int optional, VALUE *values)
st_index_t rb_hash_end(st_index_t)
static VALUE take_items(VALUE obj, long n)
VALUE rb_ary_shift(VALUE ary)
static VALUE rb_ary_reverse_each(VALUE ary)
int rb_hash_add_new_element(VALUE hash, VALUE key, VALUE val)
#define FL_UNSET_SHARED(ary)
VALUE rb_big_plus(VALUE x, VALUE y)
RUBY_EXTERN VALUE rb_cRandom
static VALUE rb_ary_frozen_p(VALUE ary)
VALUE rb_ary_each(VALUE ary)
static void ary_memfill(VALUE ary, long beg, long size, VALUE val)
static VALUE rb_ary_reverse_m(VALUE ary)
#define ARY_SET_CAPA(ary, n)
void rb_mem_clear(register VALUE *mem, register long size)
VALUE rb_ary_push(VALUE ary, VALUE item)
#define SIZED_REALLOC_N(var, type, n, old_n)
static VALUE ary_ensure_room_for_push(VALUE ary, long add_len)
VALUE rb_str_buf_new2(const char *)
static VALUE ary_make_partial(VALUE ary, VALUE klass, long offset, long len)
SSL_METHOD *(* func)(void)
#define ARY_OWNS_HEAP_P(a)
VALUE rb_ary_rassoc(VALUE ary, VALUE value)
struct st_table * rb_hash_tbl_raw(VALUE hash)
VALUE rb_ary_tmp_new(long capa)
static VALUE rb_ary_take_while(VALUE ary)
VALUE rb_ary_shared_with_p(VALUE ary1, VALUE ary2)
void ruby_sized_xfree(void *x, size_t size)
VALUE rb_funcall(VALUE, ID, int,...)
Calls a method.
static VALUE ary_ensure_room_for_unshift(VALUE ary, int argc)
#define RBASIC_SET_CLASS(obj, cls)
static VALUE reject_bang_i(VALUE a)
static void ary_join_0(VALUE ary, VALUE sep, long max, VALUE result)
void rb_raise(VALUE exc, const char *fmt,...)
static VALUE rb_ary_unshift_m(int argc, VALUE *argv, VALUE ary)
static void ary_memcpy0(VALUE ary, long beg, long argc, const VALUE *argv, VALUE buff_owner_ary)
static VALUE rb_ary_reject_bang(VALUE ary)
VALUE rb_enc_associate(VALUE obj, rb_encoding *enc)
VALUE rb_ary_clear(VALUE ary)
#define FL_SET_SHARED_ROOT(ary)
#define MUL_OVERFLOW_LONG_P(a, b)
#define OPTIMIZED_CMP(a, b, data)
VALUE rb_convert_type(VALUE, int, const char *, const char *)
VALUE rb_exec_recursive(VALUE(*)(VALUE, VALUE, int), VALUE, VALUE)
void rb_define_alloc_func(VALUE, rb_alloc_func_t)
VALUE rb_obj_is_kind_of(VALUE, VALUE)
static int sort_2(const void *ap, const void *bp, void *dummy)
void rb_include_module(VALUE klass, VALUE module)
#define ARY_SHARED_ROOT_P(ary)
VALUE rb_block_call(VALUE, ID, int, const VALUE *, rb_block_call_func_t, VALUE)
#define ARY_SHARED_NUM(ary)
VALUE rb_range_beg_len(VALUE, long *, long *, long, int)
double rb_big2dbl(VALUE x)
int st_update(st_table *table, st_data_t key, st_update_callback_func *func, st_data_t arg)
int rb_str_cmp(VALUE, VALUE)
static VALUE rb_ary_slice_bang(int argc, VALUE *argv, VALUE ary)
static VALUE rb_ary_reject(VALUE ary)
VALUE rb_ary_rotate(VALUE ary, long cnt)
void rb_gc_force_recycle(VALUE obj)
#define ARY_SHARED_P(ary)
VALUE rb_ary_cat(VALUE ary, const VALUE *argv, long len)
static VALUE rb_ary_each_index(VALUE ary)
VALUE rb_str_buf_append(VALUE, VALUE)
int rb_cmpint(VALUE val, VALUE a, VALUE b)
static VALUE rb_ary_fetch(int argc, VALUE *argv, VALUE ary)
static VALUE rb_ary_reverse_bang(VALUE ary)
static int ary_hash_orset(st_data_t *key, st_data_t *value, st_data_t arg, int existing)
static VALUE rb_ary_bsearch_index(VALUE ary)
VALUE rb_equal_opt(VALUE obj1, VALUE obj2)
static VALUE rb_ary_delete_at_m(VALUE ary, VALUE pos)
static void rb_ary_unshare(VALUE ary)
RUBY_EXTERN void * memmove(void *, const void *, size_t)
static VALUE rb_ary_join_m(int argc, VALUE *argv, VALUE ary)
static VALUE rb_ary_first(int argc, VALUE *argv, VALUE ary)
RUBY_SYMBOL_EXPORT_BEGIN typedef unsigned long st_data_t
#define NEWOBJ_OF(obj, type, klass, flags)
#define RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg)
static VALUE rb_ary_count(int argc, VALUE *argv, VALUE ary)
static VALUE rb_ary_sort_by_bang(VALUE ary)
#define OPTHASH_GIVEN_P(opts)
#define RBASIC_SET_CLASS_RAW(obj, cls)
#define RB_TYPE_P(obj, type)
static VALUE rb_ary_aset(int argc, VALUE *argv, VALUE ary)
VALUE rb_ary_assoc(VALUE ary, VALUE key)
static VALUE rb_ary_elt(VALUE ary, long offset)
#define MEMZERO(p, type, n)
static VALUE ary_enum_length(VALUE ary, VALUE args, VALUE eobj)
static VALUE rb_ary_inspect(VALUE ary)
VALUE rb_get_values_at(VALUE obj, long olen, int argc, const VALUE *argv, VALUE(*func)(VALUE, long))
static VALUE rb_ary_compact_bang(VALUE ary)
static VALUE rb_ary_select(VALUE ary)
static void ary_memcpy(VALUE ary, long beg, long argc, const VALUE *argv)
#define tmpbuf_discard(s)
void rb_ary_free(VALUE ary)
int rb_block_given_p(void)
VALUE rb_hash_aset(VALUE hash, VALUE key, VALUE val)
static VALUE ary_make_shared_copy(VALUE ary)
RUBY_EXTERN VALUE rb_cObject
static VALUE rb_ary_or(VALUE ary1, VALUE ary2)
VALUE rb_exec_recursive_paired(VALUE(*)(VALUE, VALUE, int), VALUE, VALUE, VALUE)
VALUE rb_ary_at(VALUE ary, VALUE pos)
#define RGENGC_WB_PROTECTED_ARRAY
static VALUE ary_alloc(VALUE klass)
#define tmpary_discard(a)
VALUE rb_ary_replace(VALUE copy, VALUE orig)
VALUE rb_obj_as_string(VALUE)
VALUE rb_str_buf_cat2(VALUE, const char *)
static VALUE rb_ary_zip(int argc, VALUE *argv, VALUE ary)
static VALUE to_ary(VALUE ary)
VALUE rb_ary_to_s(VALUE ary)
static VALUE binomial_coefficient(long comb, long size)
VALUE rb_define_class(const char *name, VALUE super)
Defines a top-level class.
#define FL_SET_SHARED(ary)
static VALUE rb_ary_product(int argc, VALUE *argv, VALUE ary)
static VALUE rb_ary_insert(int argc, VALUE *argv, VALUE ary)
void rb_ary_store(VALUE ary, long idx, VALUE val)
VALUE rb_ary_aref(int argc, const VALUE *argv, VALUE ary)
static VALUE rb_ary_permutation(int argc, VALUE *argv, VALUE ary)
static void ary_resize_smaller(VALUE ary, long len)
rb_atomic_t cnt[RUBY_NSIG]
static VALUE rb_ary_shuffle_bang(int argc, VALUE *argv, VALUE ary)
static void ary_discard(VALUE ary)
static VALUE rb_ary_uniq_bang(VALUE ary)
#define ALLOCV_N(type, v, n)
static VALUE recursive_join(VALUE obj, VALUE argp, int recur)
static VALUE rb_ary_combination_size(VALUE ary, VALUE args, VALUE eobj)
static VALUE rb_ary_take(VALUE obj, VALUE n)
static VALUE rb_ary_select_bang(VALUE ary)
#define range(low, item, hi)
#define RUBY_FUNC_EXPORTED
#define MEMCPY(p1, p2, type, n)
static VALUE rb_ary_max(int argc, VALUE *argv, VALUE ary)
static VALUE inspect_ary(VALUE ary, VALUE dummy, int recur)
VALUE rb_nmin_run(VALUE obj, VALUE num, int by, int rev, int ary)
#define RUBY_DTRACE_CREATE_HOOK(name, arg)
static VALUE descending_factorial(long from, long how_many)
static VALUE rb_ary_collect(VALUE ary)
static VALUE rb_ary_hash(VALUE ary)
VALUE rb_ary_to_ary(VALUE obj)
static VALUE select_bang_i(VALUE a)
void rb_define_alias(VALUE klass, const char *name1, const char *name2)
Defines an alias of a method.
#define CMP_OPTIMIZABLE(data, type)
static void ary_shrink_capa(VALUE ary)
#define RARRAY_CONST_PTR(a)
#define REALLOC_N(var, type, n)
static VALUE ary_append(VALUE x, VALUE y)
VALUE rb_ary_dig(int argc, VALUE *argv, VALUE self)
#define RARRAY_PTR_USE(ary, ptr_name, expr)
static VALUE rb_ary_rindex(int argc, VALUE *argv, VALUE ary)
static void ary_resize_capa(VALUE ary, long capacity)
void rb_ary_modify(VALUE ary)
VALUE rb_ary_delete(VALUE ary, VALUE item)
#define MEMMOVE(p1, p2, type, n)
VALUE rb_hash_values(VALUE hash)
static int sort_1(const void *ap, const void *bp, void *dummy)
int rb_scan_args(int argc, const VALUE *argv, const char *fmt,...)
static VALUE rb_ary_to_ary_m(VALUE ary)
VALUE rb_assoc_new(VALUE car, VALUE cdr)
VALUE rb_fix_plus(VALUE x, VALUE y)
rb_encoding * rb_usascii_encoding(void)
static VALUE ary_make_hash(VALUE ary)
static VALUE rb_ary_delete_if(VALUE ary)
static VALUE rb_ary_repeated_combination_size(VALUE ary, VALUE args, VALUE eobj)
#define ARY_SET_LEN(ary, n)
void ruby_qsort(void *, const size_t, const size_t, int(*)(const void *, const void *, void *), void *)
static VALUE rb_ary_to_h(VALUE ary)
static void rpermute0(const long n, const long r, long *const p, const VALUE values)
static void rcombinate0(const long n, const long r, long *const p, const long rest, const VALUE values)
#define ARY_SET_PTR(ary, p)
#define FL_UNSET_EMBED(ary)
#define RETURN_SIZED_ENUMERATOR(obj, argc, argv, size_fn)
static VALUE ary_make_substitution(VALUE ary)
static VALUE rb_ary_values_at(int argc, VALUE *argv, VALUE ary)
static VALUE empty_ary_alloc(VALUE klass)
static VALUE rb_ary_drop(VALUE ary, VALUE n)
static VALUE rb_ary_collect_bang(VALUE ary)
RUBY_FUNC_EXPORTED size_t rb_ary_memsize(VALUE ary)
static void memfill(register VALUE *mem, register long size, register VALUE val)
VALUE rb_ensure(VALUE(*b_proc)(ANYARGS), VALUE data1, VALUE(*e_proc)(ANYARGS), VALUE data2)
static void shift(struct cparse_params *v, long act, VALUE tok, VALUE val)
RUBY_EXTERN VALUE rb_cNumeric
static VALUE rb_ary_increment_share(VALUE shared)
static VALUE ary_add_hash(VALUE hash, VALUE ary)
#define RB_FLOAT_TYPE_P(obj)
static VALUE rb_ary_diff(VALUE ary1, VALUE ary2)
static VALUE ary_tmp_hash_new(void)
static VALUE rb_ary_index(int argc, VALUE *argv, VALUE ary)
int rb_respond_to(VALUE, ID)
register unsigned int len
VALUE rb_ary_new_from_values(long n, const VALUE *elts)
static VALUE rb_ary_shift_m(int argc, VALUE *argv, VALUE ary)
static VALUE flatten(VALUE ary, int level, int *modified)
static VALUE rb_ary_cycle_size(VALUE self, VALUE args, VALUE eobj)
VALUE rb_rational_plus(VALUE self, VALUE other)
VALUE rb_ary_resize(VALUE ary, long len)
expands or shrinks ary to len elements.
static VALUE rb_ary_flatten_bang(int argc, VALUE *argv, VALUE ary)
VALUE rb_equal(VALUE, VALUE)
#define ARY_SET_HEAP_LEN(ary, n)
static int yield_indexed_values(const VALUE values, const long r, const long *const p)
VALUE rb_yield_values2(int n, const VALUE *argv)
static VALUE rb_ary_fill(int argc, VALUE *argv, VALUE ary)
#define UNLIMITED_ARGUMENTS
static VALUE recursive_equal(VALUE ary1, VALUE ary2, int recur)
static void rb_ary_modify_check(VALUE ary)
#define RARRAY_AREF(a, i)
VALUE rb_check_convert_type(VALUE, int, const char *, const char *)
VALUE rb_ary_plus(VALUE x, VALUE y)
static VALUE rb_ary_s_try_convert(VALUE dummy, VALUE ary)
static void ary_double_capa(VALUE ary, long min)
static VALUE rb_ary_rotate_m(int argc, VALUE *argv, VALUE ary)
VALUE rb_check_array_type(VALUE ary)
static VALUE rb_ary_to_a(VALUE ary)
VALUE rb_obj_dig(int argc, VALUE *argv, VALUE self, VALUE notfound)
VALUE rb_check_string_type(VALUE)
VALUE rb_ary_includes(VALUE ary, VALUE item)
#define ARY_INCREASE_PTR(ary, n)
static VALUE rb_ary_equal(VALUE ary1, VALUE ary2)
static int push_value(st_data_t key, st_data_t val, st_data_t ary)
static VALUE rb_ary_repeated_permutation_size(VALUE ary, VALUE args, VALUE eobj)
st_index_t rb_hash_uint(st_index_t, st_index_t)
#define ARY_INCREASE_LEN(ary, n)
static VALUE sort_reentered(VALUE ary)
static VALUE ary_make_hash_by(VALUE ary)
VALUE rb_ary_sort_bang(VALUE ary)
static long rotate_count(long cnt, long len)
static void rb_ary_set_shared(VALUE ary, VALUE shared)
static VALUE rb_ary_length(VALUE ary)
VALUE rb_ary_dup(VALUE ary)
static VALUE rb_ary_repeated_combination(VALUE ary, VALUE num)
VALUE rb_ary_concat(VALUE x, VALUE y)
void rb_gc_writebarrier_remember(VALUE obj)
#define RETURN_ENUMERATOR(obj, argc, argv)
VALUE rb_ary_join(VALUE ary, VALUE sep)
VALUE rb_ary_tmp_new_fill(long capa)
struct cmp_opt_data cmp_opt
static VALUE rb_ary_repeated_permutation(VALUE ary, VALUE num)
static VALUE select_bang_ensure(VALUE a)
#define ARY_SET_SHARED_NUM(ary, value)
#define ARY_SET_SHARED(ary, value)
static void permute0(const long n, const long r, long *const p, char *const used, const VALUE values)
static VALUE rb_ary_empty_p(VALUE ary)
static VALUE rb_ary_rotate_bang(int argc, VALUE *argv, VALUE ary)
static void ary_recycle_hash(VALUE hash)
static VALUE ary_make_shared(VALUE ary)
static VALUE recursive_eql(VALUE ary1, VALUE ary2, int recur)
static VALUE ary_take_first_or_last(int argc, const VALUE *argv, VALUE ary, enum ary_take_pos_flags last)
static VALUE rb_ary_flatten(int argc, VALUE *argv, VALUE ary)
static VALUE ary_add_hash_by(VALUE hash, VALUE ary)
static VALUE rb_ary_permutation_size(VALUE ary, VALUE args, VALUE eobj)
VALUE rb_ary_reverse(VALUE ary)
VALUE() rb_ary_new_from_args(long n,...)
static VALUE ary_reject_bang(VALUE ary)
static VALUE rb_ary_initialize(int argc, VALUE *argv, VALUE ary)
static VALUE rb_ary_cycle(int argc, VALUE *argv, VALUE ary)
void rb_warning(const char *fmt,...)
#define rb_check_frozen(obj)
static void rb_ary_decrement_share(VALUE shared)
VALUE rb_obj_freeze(VALUE)
VALUE rb_ary_cmp(VALUE ary1, VALUE ary2)
static VALUE rb_ary_eql(VALUE ary1, VALUE ary2)
static VALUE rb_ary_uniq(VALUE ary)
static VALUE rb_ary_any_p(VALUE ary)
VALUE rb_ary_resurrect(VALUE ary)
static VALUE sort_by_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, dummy))
VALUE rb_str_buf_new(long)
static void combinate0(const long len, const long n, long *const stack, const VALUE values)
VALUE rb_usascii_str_new(const char *, long)
static VALUE ary_new(VALUE klass, long capa)
#define ARY_SHARED_OCCUPIED(ary)
static VALUE rb_ary_pop_m(int argc, VALUE *argv, VALUE ary)
static VALUE rb_ary_sum(int argc, VALUE *argv, VALUE ary)
void rb_define_method(VALUE klass, const char *name, VALUE(*func)(ANYARGS), int argc)
void rb_ary_delete_same(VALUE ary, VALUE item)
void rb_warn(const char *fmt,...)
static VALUE rb_ary_and(VALUE ary1, VALUE ary2)
static VALUE rb_ary_shuffle(int argc, VALUE *argv, VALUE ary)
st_index_t rb_hash_start(st_index_t)
static VALUE rb_ary_push_m(int argc, VALUE *argv, VALUE ary)
#define RB_OBJ_WRITE(a, slot, b)
VALUE rb_usascii_str_new_cstr(const char *)
static VALUE rb_ary_min(int argc, VALUE *argv, VALUE ary)
static void rb_ary_unshare_safe(VALUE ary)
void rb_ary_set_len(VALUE ary, long len)
VALUE rb_obj_class(VALUE)
static VALUE rb_ary_bsearch(VALUE ary)