/* iterator: each() */ static VALUE na_each(VALUE obj) { int i, sz; VALUE v; struct NARRAY *ary; char *p; void (*func)(); if (rb_block_given_p()) { GetNArray(obj,ary); p = ary->ptr; sz = na_sizeof[ary->type]; func = SetFuncs[NA_ROBJ][ary->type]; for ( i=ary->total; i-->0; ) { (*func)( 1, &v, 0, p, 0 ); rb_yield(v); p += sz; } return Qnil; } else { return rb_funcall(obj, rb_intern("to_enum"), 0); } }