mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* enumerator.c: remove by_slice and by_cons.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@11228 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
d94124b80f
commit
d4b775fe45
2 changed files with 10 additions and 67 deletions
|
@ -1,3 +1,7 @@
|
||||||
|
Thu Oct 26 15:23:47 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* enumerator.c: remove by_slice and by_cons.
|
||||||
|
|
||||||
Thu Oct 26 15:12:12 2006 NAKAMURA Usaku <usa@ruby-lang.org>
|
Thu Oct 26 15:12:12 2006 NAKAMURA Usaku <usa@ruby-lang.org>
|
||||||
|
|
||||||
* ext/digest/digest.c (Init_digest): typo.
|
* ext/digest/digest.c (Init_digest): typo.
|
||||||
|
|
73
enumerator.c
73
enumerator.c
|
@ -105,16 +105,17 @@ static VALUE
|
||||||
each_slice_i(VALUE val, VALUE *memo)
|
each_slice_i(VALUE val, VALUE *memo)
|
||||||
{
|
{
|
||||||
VALUE ary = memo[0];
|
VALUE ary = memo[0];
|
||||||
|
VALUE v = Qnil;
|
||||||
long size = (long)memo[1];
|
long size = (long)memo[1];
|
||||||
|
|
||||||
rb_ary_push(ary, val);
|
rb_ary_push(ary, val);
|
||||||
|
|
||||||
if (RARRAY_LEN(ary) == size) {
|
if (RARRAY_LEN(ary) == size) {
|
||||||
rb_yield(ary);
|
v = rb_yield(ary);
|
||||||
memo[0] = rb_ary_new2(size);
|
memo[0] = rb_ary_new2(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Qnil;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -155,6 +156,7 @@ static VALUE
|
||||||
each_cons_i(VALUE val, VALUE *memo)
|
each_cons_i(VALUE val, VALUE *memo)
|
||||||
{
|
{
|
||||||
VALUE ary = memo[0];
|
VALUE ary = memo[0];
|
||||||
|
VALUE v = Qnil;
|
||||||
long size = (long)memo[1];
|
long size = (long)memo[1];
|
||||||
|
|
||||||
if (RARRAY_LEN(ary) == size) {
|
if (RARRAY_LEN(ary) == size) {
|
||||||
|
@ -162,9 +164,9 @@ each_cons_i(VALUE val, VALUE *memo)
|
||||||
}
|
}
|
||||||
rb_ary_push(ary, val);
|
rb_ary_push(ary, val);
|
||||||
if (RARRAY_LEN(ary) == size) {
|
if (RARRAY_LEN(ary) == size) {
|
||||||
rb_yield(rb_ary_dup(ary));
|
v = rb_yield(rb_ary_dup(ary));
|
||||||
}
|
}
|
||||||
return Qnil;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -322,67 +324,6 @@ enumerator_with_index(VALUE obj)
|
||||||
enumerator_with_index_i, (VALUE)&memo);
|
enumerator_with_index_i, (VALUE)&memo);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* call-seq:
|
|
||||||
* e.by_slice {...}
|
|
||||||
*
|
|
||||||
* Iterates the given block for each slice of <n> elements.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
static VALUE
|
|
||||||
enumerator_by_slice(VALUE obj, VALUE n)
|
|
||||||
{
|
|
||||||
struct enumerator *e = enumerator_ptr(obj);
|
|
||||||
int argc = 0;
|
|
||||||
VALUE *argv = 0;
|
|
||||||
long size = NUM2LONG(n);
|
|
||||||
VALUE args[2], ary;
|
|
||||||
|
|
||||||
if (size <= 0) rb_raise(rb_eArgError, "invalid slice size");
|
|
||||||
RETURN_ENUMERATOR(obj, 1, &n);
|
|
||||||
args[0] = rb_ary_new2(size);
|
|
||||||
args[1] = (VALUE)size;
|
|
||||||
if (e->args) {
|
|
||||||
argc = RARRAY_LEN(e->args);
|
|
||||||
argv = RARRAY_PTR(e->args);
|
|
||||||
}
|
|
||||||
|
|
||||||
return rb_block_call(e->method, rb_intern("call"), argc, argv,
|
|
||||||
each_slice_i, (VALUE)&args);
|
|
||||||
return Qnil;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* call-seq:
|
|
||||||
* e.by_cons {...}
|
|
||||||
*
|
|
||||||
* Iterates the given block for each array of consecutive <n>
|
|
||||||
* elements.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
static VALUE
|
|
||||||
enumerator_by_cons(VALUE obj, VALUE n)
|
|
||||||
{
|
|
||||||
struct enumerator *e = enumerator_ptr(obj);
|
|
||||||
int argc = 0;
|
|
||||||
VALUE *argv = 0;
|
|
||||||
long size = NUM2LONG(n);
|
|
||||||
VALUE args[2], ary;
|
|
||||||
|
|
||||||
if (size <= 0) rb_raise(rb_eArgError, "invalid slice size");
|
|
||||||
RETURN_ENUMERATOR(obj, 1, &n);
|
|
||||||
args[0] = rb_ary_new2(size);
|
|
||||||
args[1] = (VALUE)size;
|
|
||||||
if (e->args) {
|
|
||||||
argc = RARRAY_LEN(e->args);
|
|
||||||
argv = RARRAY_PTR(e->args);
|
|
||||||
}
|
|
||||||
|
|
||||||
return rb_block_call(e->method, rb_intern("call"), argc, argv,
|
|
||||||
each_cons_i, (VALUE)&args);
|
|
||||||
return Qnil;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* call-seq:
|
* call-seq:
|
||||||
* e.to_splat => array
|
* e.to_splat => array
|
||||||
|
@ -412,8 +353,6 @@ Init_Enumerator(void)
|
||||||
rb_define_method(rb_cEnumerator, "initialize", enumerator_initialize, -1);
|
rb_define_method(rb_cEnumerator, "initialize", enumerator_initialize, -1);
|
||||||
rb_define_method(rb_cEnumerator, "each", enumerator_each, 0);
|
rb_define_method(rb_cEnumerator, "each", enumerator_each, 0);
|
||||||
rb_define_method(rb_cEnumerator, "with_index", enumerator_with_index, 0);
|
rb_define_method(rb_cEnumerator, "with_index", enumerator_with_index, 0);
|
||||||
rb_define_method(rb_cEnumerator, "by_slice", enumerator_by_slice, 1);
|
|
||||||
rb_define_method(rb_cEnumerator, "by_cons", enumerator_by_cons, 1);
|
|
||||||
rb_define_method(rb_cEnumerator, "to_splat", enumerator_to_splat, 0);
|
rb_define_method(rb_cEnumerator, "to_splat", enumerator_to_splat, 0);
|
||||||
|
|
||||||
sym_each = ID2SYM(rb_intern("each"));
|
sym_each = ID2SYM(rb_intern("each"));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue