/* * call-seq: * each_cons(n) {...} * * Iterates the given block for each array of consecutive <n> * elements. * * e.g.: * (1..10).each_cons(3) {|a| p a} * # outputs below * [1, 2, 3] * [2, 3, 4] * [3, 4, 5] * [4, 5, 6] * [5, 6, 7] * [6, 7, 8] * [7, 8, 9] * [8, 9, 10] * */ static VALUE enum_each_cons(obj, n) VALUE obj, n; { long size = NUM2LONG(n); NODE *memo; if (size <= 0) rb_raise(rb_eArgError, "invalid size"); memo = rb_node_newnode(NODE_MEMO, rb_ary_new2(size), 0, size); rb_iterate(rb_each, obj, each_cons_i, (VALUE)memo); return Qnil; }