/* iterator: collect!() */
static VALUE
na_collect_bang(VALUE self)
{
int i, sz;
VALUE v;
struct NARRAY *a1;
char *p1;
void (*get)(), (*set)();
GetNArray(self,a1);
p1 = a1->ptr;
sz = na_sizeof[a1->type];
get = SetFuncs[NA_ROBJ][a1->type];
set = SetFuncs[a1->type][NA_ROBJ];
for ( i=a1->total; i-->0; ) {
(*get)( 1, &v, 0, p1, 0 );
v = rb_yield(v);
(*set)( 1, p1, 0, &v, 0 );
p1 += sz;
}
return self;
}