>>>>> "E" == Emil Ong <onge / mcs.anl.gov> writes:

E> an array.  I looked at rb_iterate() and its description in the pickaxe
E> book, but I don't understand how to use it except with rb_each().

 A stupid example :

pigeon% cat tt.c
#include <ruby.h>

static VALUE
tt_each(tmp)
    VALUE tmp;
{
    rb_funcall(tmp, rb_intern("map!"), 0, 0);
}

static VALUE
tt_yield(obj)
    VALUE obj;
{
    int i = NUM2INT(obj);
    rb_warn("received %d", i);
    return (i <= 2)?Qtrue:Qfalse;
}

static VALUE
tt_map_bang(obj)
    VALUE obj;
{
    return rb_iterate(tt_each, obj, tt_yield, 0);
}

void Init_tt()
{
    rb_define_method(rb_cArray, "tt!", tt_map_bang, 0);
}
pigeon%

pigeon% ruby -rtt -e 'a = [1, 3, 4, 2]; a.tt!; p a'
-e:1: warning: received 1
-e:1: warning: received 3
-e:1: warning: received 4
-e:1: warning: received 2
[true, false, false, true]
pigeon% 



Guy Decoux