static void <%=c_iter%>(na_loop_t *const lp) { size_t i; char *p1; size_t p2; ssize_t s1, s2; size_t *idx1, *idx2; BIT_DIGIT *a2, x; dtype y; INIT_COUNTER(lp, i); INIT_PTR_IDX(lp, 0, p1, s1, idx1); INIT_PTR_BIT_IDX(lp, 1, a2, p2, s2, idx2); if (idx2) { if (idx1) { for (; i--;) { LOAD_BIT(a2, p2+*idx2, x); idx2++; y = m_from_real(x); SET_DATA_INDEX(p1,idx1,dtype,y); } } else { for (; i--;) { LOAD_BIT(a2, p2+*idx2, x); idx2++; y = m_from_real(x); SET_DATA_STRIDE(p1,s1,dtype,y); } } } else { if (idx1) { for (; i--;) { LOAD_BIT(a2, p2, x); p2 += s2; y = m_from_real(x); SET_DATA_INDEX(p1,idx1,dtype,y); } } else { for (; i--;) { LOAD_BIT(a2, p2, x); p2 += s2; y = m_from_real(x); SET_DATA_STRIDE(p1,s1,dtype,y); } } } } static VALUE <%=c_func%>(VALUE self, VALUE obj) { ndfunc_arg_in_t ain[2] = {{OVERWRITE,0},{Qnil,0}}; ndfunc_t ndf = {<%=c_iter%>, FULL_LOOP, 2,0, ain,0}; na_ndloop(&ndf, 2, self, obj); return self; }