fillarr_ptr → fillarrv_ptr

This commit is contained in:
dzaima 2024-09-09 17:26:37 +03:00
parent af6c618158
commit 4cf8e10b95
11 changed files with 24 additions and 23 deletions

View File

@ -82,7 +82,7 @@ NOINLINE B list_range(B x) {
if (rsh) shcpy(rsh, sh, xia);
if (ria) {
B* rp = fillarr_ptr(r);
B* rp = fillarrv_ptr(r);
ud_rec(rp, 0, xia, pos, sh);
fillarr_setFill(r, incG(rp[0]));
} else {

View File

@ -81,7 +81,7 @@ static B group_simple(B w, B x, ur xr, usz wia, usz xn, usz* xsh, u8 we) {
if (ria > (i64)(USZ_MAX)) thrOOM();
Arr* r = m_fillarr0p(ria);
B* rp = fillarr_ptr(r);
B* rp = fillarrv_ptr(r);
B xf = getFillR(x);
Arr* rf = emptyWithFill(xf);
@ -237,14 +237,14 @@ static B group_simple(B w, B x, ur xr, usz wia, usz xn, usz* xsh, u8 we) {
if (csz == 1) {
for (usz i = 0; i < xn; i++) {
i32 n = wp[i];
if (n>=0) fillarr_ptr(a(rp[n]))[pos[n]++] = Get(x, i);
if (n>=0) fillarrv_ptr(a(rp[n]))[pos[n]++] = Get(x, i);
}
} else {
for (usz i = 0; i < xn; i++) {
i32 n = wp[i];
if (n<0) continue;
usz p = (pos[n]++)*csz;
B* rnp = fillarr_ptr(a(rp[n])) + p;
B* rnp = fillarrv_ptr(a(rp[n])) + p;
for (usz j = 0; j < csz; j++) rnp[j] = Get(x, i*csz + j);
}
}

View File

@ -188,7 +188,7 @@ B variation_c2(B t, B w, B x) {
Arr* r = m_fillarrp(xia);
fillarr_setFill(r, getFillR(x));
arr_shCopy(r, x);
COPY_TO(fillarr_ptr(r), el_B, 0, x, 0, xia);
COPY_TO(fillarrv_ptr(r), el_B, 0, x, 0, xia);
NOGC_E;
res = taga(r);
@ -252,7 +252,7 @@ static B unshare(B x) {
case t_fillarr: case t_fillslice: {
Arr* r = arr_shCopy(m_fillarr0p(xia), x);
fillarr_setFill(r, unshare(getFillR(x)));
B* rp = fillarr_ptr(r);
B* rp = fillarrv_ptr(r);
B* xp = arr_bptr(x);
for (usz i = 0; i < xia; i++) rp[i] = unshare(xp[i]);
return unshareShape(r);

View File

@ -156,7 +156,7 @@ B select_c2(B t, B w, B x) {
} else {
Arr* r = m_fillarrp(1);
arr_shAtm(r);
fillarr_ptr(r)[0] = xv;
fillarrv_ptr(r)[0] = xv;
fillarr_setFill(r, xf);
NOGC_E;
rb = taga(r);

View File

@ -46,8 +46,8 @@ FORCE_INLINE B m_vec2Base(B a, B b, bool fills) {
dec(bf);
Arr* ra = arr_shVec(m_fillarrp(2));
fillarr_setFill(ra, af);
fillarr_ptr(ra)[0] = a;
fillarr_ptr(ra)[1] = b;
fillarrv_ptr(ra)[0] = a;
fillarrv_ptr(ra)[1] = b;
NOGC_E;
return taga(ra);
}
@ -141,8 +141,8 @@ NOINLINE Arr* reshape_one(usz nia, B x) {
incBy(x, nia); // in addition with the existing reference, this covers the filled amount & asFill
B rf = asFill(x);
r = m_fillarrp(nia);
if (sizeof(B)==8) fill_words(fillarr_ptr(r), x.u, (u64)nia*8);
else for (usz i = 0; i < nia; i++) fillarr_ptr(r)[i] = x;
if (sizeof(B)==8) fill_words(fillarrv_ptr(r), x.u, (u64)nia*8);
else for (usz i = 0; i < nia; i++) fillarrv_ptr(r)[i] = x;
fillarr_setFill(r, rf);
NOGC_E;
}
@ -1266,11 +1266,11 @@ static B pick_replaceOne(B fn, usz pos, B x, usz xia) {
if (!(TY(x)==t_harr && reusable(x))) x = taga(cpyHArr(x));
xp = harr_ptr(x);
} else if (TY(x)==t_fillarr && reusable(x)) {
xp = fillarr_ptr(a(x));
xp = fillarrv_ptr(a(x));
} else {
Arr* x2 = m_fillarrp(xia);
fillarr_setFill(x2, getFillR(x));
xp = fillarr_ptr(x2);
xp = fillarrv_ptr(x2);
COPY_TO(xp, el_B, 0, x, 0, xia);
NOGC_E;
arr_shCopy(x2, x);

View File

@ -2,16 +2,16 @@
static B* arr_bptr(B x) { assert(isArr(x));
if (TY(x)==t_harr) return harr_ptr(x);
if (TY(x)==t_fillarr) return fillarr_ptr(a(x));
if (TY(x)==t_fillarr) return fillarrv_ptr(a(x));
if (TY(x)==t_hslice) return hslice_ptr(x);
if (TY(x)==t_fillslice) return c(FillSlice,x)->a;
if (TY(x)==t_fillslice) return fillslicev_ptr(a(x));
return NULL;
}
static B* arrV_bptr(Arr* x) {
if (PTY(x)==t_harr) return harrv_ptr(x);
if (PTY(x)==t_fillarr) return fillarr_ptr(x);
if (PTY(x)==t_fillarr) return fillarrv_ptr(x);
if (PTY(x)==t_hslice) return hslicev_ptr(x);
if (PTY(x)==t_fillslice) return ((FillSlice*)x)->a;
if (PTY(x)==t_fillslice) return fillslicev_ptr(x);
return NULL;
}

View File

@ -167,7 +167,7 @@ NOINLINE B m_funit(B x) {
}
NOINLINE B m_fvec1(B x) {
Arr* ra = arr_shVec(m_fillarrp(1));
fillarr_ptr(ra)[0] = x;
fillarrv_ptr(ra)[0] = x;
fillarr_setFill(ra, m_f64(0));
NOGC_E;
fillarr_setFill(ra, asFill(inc(x)));

View File

@ -83,7 +83,8 @@ static Arr* m_fillarrp(usz ia) { // needs a NOGC_E after fill & all elements are
return r;
}
static void fillarr_setFill(Arr* x, B fill) { assert(PTY(x)==t_fillarr); ((FillArr*)x)->fill = fill; } // consumes fill
static B* fillarr_ptr(Arr* x) { assert(PTY(x)==t_fillarr); return ((FillArr*)x)->a; }
static B* fillarrv_ptr (Arr* x) { assert(PTY(x)==t_fillarr); return ((FillArr*)x)->a; }
static B* fillslicev_ptr(Arr* x) { assert(PTY(x)==t_fillslice); return ((FillSlice*)x)->a; }
static Arr* m_fillarrpEmpty(B fill) {
Arr* r = m_fillarrp(0);
fillarr_setFill(r, fill);
@ -93,7 +94,7 @@ static Arr* m_fillarrpEmpty(B fill) {
static Arr* m_fillarr0p(usz ia) { // zero-initialized fillarr, with both fill & elements set to m_f64(0)
Arr* r = arr_shVec(m_fillarrp(ia));
fillarr_setFill(r, m_f64(0));
FILL_TO(fillarr_ptr(r), el_B, 0, m_f64(0), ia);
FILL_TO(fillarrv_ptr(r), el_B, 0, m_f64(0), ia);
NOGC_E;
return r;
}

View File

@ -72,7 +72,7 @@ B eachm_fn(B fo, B x, FC1 f) {
case t_fillarr: {
dec(c(FillArr,x)->fill);
c(FillArr,x)->fill = bi_noFill;
xp = fillarr_ptr(a(x));
xp = fillarrv_ptr(a(x));
break;
}
case t_harr: {

View File

@ -126,7 +126,7 @@ NOINLINE JoinFillslice fillslice_getJoin(B w, usz ria) {
if (p->refc!=1) goto no;
if (p->type!=t_fillarr && p->type!=t_harr) goto no;
void* rp = p->type==t_fillarr? fillarr_ptr(p) : harrv_ptr(p);
void* rp = p->type==t_fillarr? fillarrv_ptr(p) : harrv_ptr(p);
if (rp != s->a) goto no;
if (PIA(p)!=wia) goto no;
usz wsz = mm_sizeUsable((Value*)p);

View File

@ -187,7 +187,7 @@ FORCE_INLINE B arr_join_inline(B w, B x, bool consume, bool* usedW) {
rp = t.rp;
goto yes;
}
case t_fillarr: if (fsizeof(FillArr,a,B,ria)<wsz) { rp = fillarr_ptr(a(w)); dec(c(FillArr,w)->fill); c(FillArr,w)->fill = bi_noFill; goto yes; } break;
case t_fillarr: if (fsizeof(FillArr,a,B,ria)<wsz) { rp = fillarrv_ptr(a(w)); dec(c(FillArr,w)->fill); c(FillArr,w)->fill = bi_noFill; goto yes; } break;
case t_harr: if (fsizeof(HArr, a,B,ria)<wsz) { rp = harr_ptr( w ); goto yes; } break;
}
no:; // failed to reuse