use new harr/hslice _ptr functions
This commit is contained in:
parent
15401e8dfb
commit
af6c618158
@ -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++) {
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user