use new harr/hslice _ptr functions

This commit is contained in:
dzaima 2024-09-09 17:20:29 +03:00
parent 15401e8dfb
commit af6c618158
5 changed files with 16 additions and 16 deletions

View File

@ -493,7 +493,7 @@ B select_replace(u32 chr, B w, B x, B rep, usz wia, usz cam, usz csz) { // consu
}
case el_B: {
ra = reuse? a(REUSE(x)) : cpyHArr(x);
B* rp = harrP_parts((HArr*)ra).a;
B* rp = harrv_ptr(ra);
SGet(rep)
if (csz==1) {
for (usz i = 0; i < wia; i++) {

View File

@ -3,14 +3,14 @@
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_hslice) return c(HSlice,x)->a;
if (TY(x)==t_hslice) return hslice_ptr(x);
if (TY(x)==t_fillslice) return c(FillSlice,x)->a;
return NULL;
}
static B* arrV_bptr(Arr* x) {
if (PTY(x)==t_harr) return ((HArr*)x)->a;
if (PTY(x)==t_harr) return harrv_ptr(x);
if (PTY(x)==t_fillarr) return fillarr_ptr(x);
if (PTY(x)==t_hslice) return ((HSlice*)x)->a;
if (PTY(x)==t_hslice) return hslicev_ptr(x);
if (PTY(x)==t_fillslice) return ((FillSlice*)x)->a;
return NULL;
}

View File

@ -28,19 +28,19 @@ static Arr* m_hslice(Arr* p, B* ptr, usz ia) {
static Arr* harr_slice (B x, usz s, usz ia) { return m_hslice(a(x), c(HArr,x)->a+s, ia); }
static Arr* hslice_slice(B x, usz s, usz ia) { Arr* p = ptr_inc(c(Slice,x)->p); Arr* r = m_hslice(p, c(HSlice,x)->a+s, ia); decG(x); return r; }
static B harr_get (Arr* x, usz n) { assert(PTY(x)==t_harr ); return inc(((HArr* )x)->a[n]); }
static B hslice_get (Arr* x, usz n) { assert(PTY(x)==t_hslice); return inc(((HSlice*)x)->a[n]); }
static B harr_getU (Arr* x, usz n) { assert(PTY(x)==t_harr ); return ((HArr* )x)->a[n] ; }
static B hslice_getU(Arr* x, usz n) { assert(PTY(x)==t_hslice); return ((HSlice*)x)->a[n] ; }
static B harr_get (Arr* x, usz n) { assert(PTY(x)==t_harr ); return inc(harrv_ptr (x)[n]); }
static B hslice_get (Arr* x, usz n) { assert(PTY(x)==t_hslice); return inc(hslicev_ptr(x)[n]); }
static B harr_getU (Arr* x, usz n) { assert(PTY(x)==t_harr ); return harrv_ptr (x)[n] ; }
static B hslice_getU(Arr* x, usz n) { assert(PTY(x)==t_hslice); return hslicev_ptr(x)[n] ; }
DEF_FREE(harr) {
decSh(x);
B* p = ((HArr*)x)->a; // don't use harr_ptr so type isn't checked
B* p = ((HArr*)x)->a; // don't use harrv_ptr so type isn't checked
usz ia = PIA((Arr*)x);
for (usz i = 0; i < ia; i++) dec(p[i]);
}
static void harr_visit(Value* x) {
VISIT_SHAPE(x);
usz ia = PIA((Arr*)x); B* p = ((HArr*)x)->a;
usz ia = PIA((Arr*)x); B* p = harrv_ptr(x);
for (usz i = 0; i < ia; i++) mm_visit(p[i]);
}
static bool harr_canStore(B x) { return true; }
@ -48,7 +48,7 @@ static bool harr_canStore(B x) { return true; }
DEF_FREE(harrP) { assert(PTY(x)==t_harrPartial|PTY(x)==t_freed);
B* p = ((HArr*)x)->a;
B* p = ((HArr*)x)->a; // don't use harrv_ptr so type isn't checked
usz am = PIA((HArr*)x);
for (usz i = 0; i < am; i++) dec(p[i]);
}
@ -58,7 +58,7 @@ void harr_abandon_impl(HArr* p) { assert(PTY(p) == t_harrPartial);
mm_free((Value*) p);
}
static void harrP_visit(Value* x) { assert(PTY(x) == t_harrPartial);
B* p = ((HArr*)x)->a;
B* p = harrv_ptr(x);
usz am = PIA((HArr*)x);
for (usz i = 0; i < am; i++) mm_visit(p[i]);
}
@ -78,7 +78,7 @@ static void harrP_print(FILE* f, B x) {
#if DEBUG
static void harr_freeT(Value* x) {
B* p = ((HArr*)x)->a;
B* p = harrv_ptr(x);
usz ia = PIA((Arr*)x);
for (usz i = 0; i < ia; i++) assert(!isVal(p[i]));
tyarr_freeF(x);

View File

@ -82,7 +82,7 @@ B eachm_fn(B fo, B x, FC1 f) {
case t_fillslice: {
FillSlice* s = c(FillSlice,x);
Arr* p = s->p;
if (p->refc==1 && ((p->type==t_fillarr && ((FillArr*)p)->a==s->a) || (p->type==t_harr && ((HArr*)p)->a==s->a)) && PIA(p)==ia) {
if (p->refc==1 && ((p->type==t_fillarr && ((FillArr*)p)->a==s->a) || (p->type==t_harr && harrv_ptr(p)==s->a)) && PIA(p)==ia) {
ur sr = PRNK(s);
if (sr<=1) {
arr_shErase(p, sr);

View File

@ -40,7 +40,7 @@ NOINLINE Mut make_mut_init(u64 ia, u8 el) {
#endif
static void* arr_ptr(Arr* t, u8 el) {
return el==el_B? (void*)((HArr*)t)->a : tyarrv_ptr((TyArr*)t);
return el==el_B? (void*)harrv_ptr(t) : tyarrv_ptr((TyArr*)t);
}
INIT_GLOBAL u8 reuseElType[t_COUNT];
@ -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) : ((HArr*)p)->a;
void* rp = p->type==t_fillarr? fillarr_ptr(p) : harrv_ptr(p);
if (rp != s->a) goto no;
if (PIA(p)!=wia) goto no;
usz wsz = mm_sizeUsable((Value*)p);