typed ⥊
This commit is contained in:
parent
3d62f9c109
commit
c3b46a42bc
@ -18,37 +18,33 @@ static Arr* take_impl(usz ria, B x) { // consumes x; returns v↑⥊𝕩 without
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
B shape_c1(B t, B x) {
|
static B unitV1(B x) {
|
||||||
if (isAtm(x)) {
|
|
||||||
unit:
|
|
||||||
if (isF64(x)) {
|
if (isF64(x)) {
|
||||||
i32 i = (i32)x.f;
|
i32 i = (i32)x.f;
|
||||||
if (i == x.f) {
|
if (RARE(x.f != i)) { f64* rp; B r = m_f64arrv(&rp, 1); rp[0] = x.f; return r; }
|
||||||
i32* rp; B r = m_i32arrv(&rp, 1);
|
if (x.f == (i8 )i) { i8* rp; B r = m_i8arrv (&rp, 1); rp[0] = i; return r; }
|
||||||
rp[0] = i;
|
else if (x.f == (i16)i) { i16* rp; B r = m_i16arrv(&rp, 1); rp[0] = i; return r; }
|
||||||
return r;
|
else { i32* rp; B r = m_i32arrv(&rp, 1); rp[0] = i; return r; }
|
||||||
} else {
|
|
||||||
f64* rp; B r = m_f64arrv(&rp, 1);
|
|
||||||
rp[0] = x.f;
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (isC32(x)) {
|
if (isC32(x)) {
|
||||||
u32* rp; B r = m_c32arrv(&rp, 1);
|
u32 c = o2cu(x);
|
||||||
rp[0] = o2cu(x);
|
if (LIKELY(c<U8_MAX )) { u8* rp; B r = m_c8arrv (&rp, 1); rp[0] = c; return r; }
|
||||||
return r;
|
else if (LIKELY(c<U16_MAX)) { u16* rp; B r = m_c16arrv(&rp, 1); rp[0] = c; return r; }
|
||||||
|
else { u32* rp; B r = m_c32arrv(&rp, 1); rp[0] = c; return r; }
|
||||||
}
|
}
|
||||||
Arr* ra = m_fillarrp(1); arr_shVec(ra);
|
Arr* ra = m_fillarrp(1); arr_shVec(ra);
|
||||||
fillarr_setFill(ra, asFill(inc(x)));
|
fillarr_setFill(ra, asFill(inc(x)));
|
||||||
fillarr_ptr(ra)[0] = x;
|
fillarr_ptr(ra)[0] = x;
|
||||||
return taga(ra);
|
return taga(ra);
|
||||||
} else {
|
}
|
||||||
|
|
||||||
|
B shape_c1(B t, B x) {
|
||||||
|
if (isAtm(x)) return unitV1(x);
|
||||||
usz ia = a(x)->ia;
|
usz ia = a(x)->ia;
|
||||||
if (ia==1 && TI(x,elType)<el_B) {
|
if (ia==1 && TI(x,elType)<el_B) {
|
||||||
B n = IGet(x,0);
|
B n = IGet(x,0);
|
||||||
dec(x);
|
dec(x);
|
||||||
x = n;
|
return unitV1(n);
|
||||||
goto unit;
|
|
||||||
}
|
}
|
||||||
if (reusable(x)) {
|
if (reusable(x)) {
|
||||||
decSh(v(x)); arr_shVec(a(x));
|
decSh(v(x)); arr_shVec(a(x));
|
||||||
@ -56,7 +52,6 @@ B shape_c1(B t, B x) {
|
|||||||
}
|
}
|
||||||
Arr* r = TI(x,slice)(x, 0, ia); arr_shVec(r);
|
Arr* r = TI(x,slice)(x, 0, ia); arr_shVec(r);
|
||||||
return taga(r);
|
return taga(r);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
B shape_c2(B t, B w, B x) {
|
B shape_c2(B t, B w, B x) {
|
||||||
usz xia = isArr(x)? a(x)->ia : 1;
|
usz xia = isArr(x)? a(x)->ia : 1;
|
||||||
@ -177,15 +172,10 @@ B shape_c2(B t, B w, B x) {
|
|||||||
unit:
|
unit:
|
||||||
if (isF64(x)) { decA(xf);
|
if (isF64(x)) { decA(xf);
|
||||||
i32 n = (i32)x.f;
|
i32 n = (i32)x.f;
|
||||||
if (n == x.f) {
|
if (RARE(n!=x.f)) { f64* rp; Arr* r = m_f64arrp(&rp,nia); arr_shSetU(r,nr,sh); for (u64 i=0; i<nia; i++) rp[i]=x.f; return taga(r); }
|
||||||
i32* rp; Arr* r = m_i32arrp(&rp, nia); arr_shSetU(r, nr, sh);
|
else if(n==(i8 )n) { i8* rp; Arr* r = m_i8arrp (&rp,nia); arr_shSetU(r,nr,sh); for (u64 i=0; i<nia; i++) rp[i]=n ; return taga(r); }
|
||||||
for (u64 i = 0; i < nia; i++) rp[i] = n;
|
else if(n==(i16)n) { i16* rp; Arr* r = m_i16arrp(&rp,nia); arr_shSetU(r,nr,sh); for (u64 i=0; i<nia; i++) rp[i]=n ; return taga(r); }
|
||||||
return taga(r);
|
else { i32* rp; Arr* r = m_i32arrp(&rp,nia); arr_shSetU(r,nr,sh); for (u64 i=0; i<nia; i++) rp[i]=n ; return taga(r); }
|
||||||
} else {
|
|
||||||
f64* rp; Arr* r = m_f64arrp(&rp, nia); arr_shSetU(r, nr, sh);
|
|
||||||
for (u64 i = 0; i < nia; i++) rp[i] = x.f;
|
|
||||||
return taga(r);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (isC32(x)) { decA(xf);
|
if (isC32(x)) { decA(xf);
|
||||||
u32* rp; Arr* r = m_c32arrp(&rp, nia); arr_shSetU(r, nr, sh);
|
u32* rp; Arr* r = m_c32arrp(&rp, nia); arr_shSetU(r, nr, sh);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user