/* 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);
  }
}