better m_atomUnit
This commit is contained in:
parent
7393c4b663
commit
c69a3373b9
@ -160,3 +160,25 @@ B withFill(B x, B fill) { // consumes both
|
|||||||
decG(x);
|
decG(x);
|
||||||
return taga(r);
|
return taga(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
B m_atomUnit(B x) {
|
||||||
|
u64 data; assert(sizeof(f64)<=8);
|
||||||
|
u8 t;
|
||||||
|
if (isNum(x)) {
|
||||||
|
i32 xi = (i32)x.f;
|
||||||
|
if (RARE(xi!=x.f)) { f64 v=x.f; memcpy(&data, &v, sizeof(v)); t=t_f64arr; }
|
||||||
|
else if (q_ibit(xi)) { u64 v=bitx(x); memcpy(&data, &v, sizeof(v)); t=t_bitarr; }
|
||||||
|
else if (xi==(i8 )xi) { i8 v=xi; memcpy(&data, &v, sizeof(v)); t=t_i8arr; }
|
||||||
|
else if (xi==(i16)xi) { i16 v=xi; memcpy(&data, &v, sizeof(v)); t=t_i16arr; }
|
||||||
|
else { i32 v=xi; memcpy(&data, &v, sizeof(v)); t=t_i32arr; }
|
||||||
|
} else if (isC32(x)) {
|
||||||
|
u32 xi = o2cu(x);
|
||||||
|
if (xi==(u8 )xi) { u8 v=xi; memcpy(&data, &v, sizeof(v)); t=t_c8arr; }
|
||||||
|
else if (xi==(u16)xi) { u16 v=xi; memcpy(&data, &v, sizeof(v)); t=t_c16arr; }
|
||||||
|
else { u32 v=xi; memcpy(&data, &v, sizeof(v)); t=t_c32arr; }
|
||||||
|
} else return m_unit(x);
|
||||||
|
TyArr* r = m_arr(offsetof(TyArr,a) + sizeof(u64), t, 1);
|
||||||
|
*((u64*)r->a) = data;
|
||||||
|
arr_shAlloc((Arr*)r, 0);
|
||||||
|
return taga(r);
|
||||||
|
}
|
||||||
|
|||||||
@ -88,29 +88,7 @@ static B m_unit(B x) { // consumes
|
|||||||
return taga(r);
|
return taga(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
static B m_atomUnit(B x) { // consumes
|
B m_atomUnit(B x); // consumes
|
||||||
if (isNum(x)) {
|
|
||||||
Arr* r;
|
|
||||||
i32 xi = (i32)x.f;
|
|
||||||
if (RARE(xi!=x.f)) { f64* rp; r = m_f64arrp(&rp, 1); rp[0] = x.f; }
|
|
||||||
else if (q_ibit(xi)) { u64* rp; r = m_bitarrp(&rp, 1); rp[0] = bitx(x); }
|
|
||||||
else if (xi==(i8 )xi) { i8* rp; r = m_i8arrp (&rp, 1); rp[0] = xi; }
|
|
||||||
else if (xi==(i16)xi) { i16* rp; r = m_i16arrp(&rp, 1); rp[0] = xi; }
|
|
||||||
else { i32* rp; r = m_i32arrp(&rp, 1); rp[0] = xi; }
|
|
||||||
arr_shAlloc(r, 0);
|
|
||||||
return taga(r);
|
|
||||||
}
|
|
||||||
if (isC32(x)) {
|
|
||||||
Arr* r;
|
|
||||||
u32 xi = o2cu(x);
|
|
||||||
if (xi==(i8 )xi) { u8* rp; r = m_c8arrp (&rp, 1); rp[0] = xi; }
|
|
||||||
else if (xi==(i16)xi) { u16* rp; r = m_c16arrp(&rp, 1); rp[0] = xi; }
|
|
||||||
else { u32* rp; r = m_c32arrp(&rp, 1); rp[0] = xi; }
|
|
||||||
arr_shAlloc(r,0);
|
|
||||||
return taga(r);
|
|
||||||
}
|
|
||||||
return m_unit(x);
|
|
||||||
}
|
|
||||||
|
|
||||||
static B fill_or(B wf, B xf) { // consumes
|
static B fill_or(B wf, B xf) { // consumes
|
||||||
if (fillEqual(wf, xf)) {
|
if (fillEqual(wf, xf)) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user