use new conversion functions
This commit is contained in:
parent
e98660bfa8
commit
6cf3ccb7d5
@ -231,13 +231,13 @@ static B unshare(B x) {
|
||||
if (!isArr(x)) return x;
|
||||
usz xia = a(x)->ia;
|
||||
switch (v(x)->type) {
|
||||
case t_i8arr: { i8 * rp; B r = m_i8arrc (&rp, x); memcpy(rp, i8arr_ptr (x), xia*1); return r; }
|
||||
case t_i16arr: { i16* rp; B r = m_i16arrc(&rp, x); memcpy(rp, i16arr_ptr(x), xia*2); return r; }
|
||||
case t_i32arr: { i32* rp; B r = m_i32arrc(&rp, x); memcpy(rp, i32arr_ptr(x), xia*4); return r; }
|
||||
case t_c8arr: { u8 * rp; B r = m_c8arrc (&rp, x); memcpy(rp, c8arr_ptr (x), xia*1); return r; }
|
||||
case t_c16arr: { u16* rp; B r = m_c16arrc(&rp, x); memcpy(rp, c16arr_ptr(x), xia*2); return r; }
|
||||
case t_c32arr: { u32* rp; B r = m_c32arrc(&rp, x); memcpy(rp, c32arr_ptr(x), xia*4); return r; }
|
||||
case t_f64arr: { f64* rp; B r = m_f64arrc(&rp, x); memcpy(rp, f64arr_ptr(x), xia*8); return r; }
|
||||
case t_i8arr: return taga(cpyI8Arr (inc(x)));
|
||||
case t_i16arr: return taga(cpyI16Arr(inc(x)));
|
||||
case t_i32arr: return taga(cpyI32Arr(inc(x)));
|
||||
case t_c8arr: return taga(cpyC8Arr (inc(x)));
|
||||
case t_c16arr: return taga(cpyC16Arr(inc(x)));
|
||||
case t_c32arr: return taga(cpyC32Arr(inc(x)));
|
||||
case t_f64arr: return taga(cpyF64Arr(inc(x)));
|
||||
case t_harr: {
|
||||
HArr_p r = m_harrUc(x);
|
||||
B* xp = harr_ptr(x);
|
||||
|
||||
@ -493,37 +493,41 @@ B num_squeeze(B x) {
|
||||
if (c!=cf) return x; // already f64
|
||||
or|= c<0?-c:c;
|
||||
}
|
||||
if (or<=I8_MAX ) { i8* rp; B r = m_i8arrc (&rp, x); for (usz i=0;i<ia;i++) rp[i]=(i8 )xp[i]; dec(x); return r; }
|
||||
else if (or<=I16_MAX) { i16* rp; B r = m_i16arrc(&rp, x); for (usz i=0;i<ia;i++) rp[i]=(i16)xp[i]; dec(x); return r; }
|
||||
else { i32* rp; B r = m_i32arrc(&rp, x); for (usz i=0;i<ia;i++) rp[i]=(i32)xp[i]; dec(x); return r; }
|
||||
goto r_or;
|
||||
}
|
||||
|
||||
B* xp = arr_bptr(x);
|
||||
if (xp!=NULL) {
|
||||
for (; i < ia; i++) {
|
||||
if (!q_i32(xp[i])) goto n_i32_1;
|
||||
if (RARE(!q_i32(xp[i]))) {
|
||||
while (i<ia) if (!isF64(xp[i++])) return x;
|
||||
goto r_f64;
|
||||
}
|
||||
i32 c = o2iu(xp[i]);
|
||||
or|= c<0?-c:c;
|
||||
}
|
||||
if (or<=I8_MAX ) { i8* rp; B r = m_i8arrc (&rp, x); for (usz i=0;i<ia;i++) rp[i]=o2iu(xp[i]); dec(x); return r; }
|
||||
else if (or<=I16_MAX) { i16* rp; B r = m_i16arrc(&rp, x); for (usz i=0;i<ia;i++) rp[i]=o2iu(xp[i]); dec(x); return r; }
|
||||
else { i32* rp; B r = m_i32arrc(&rp, x); for (usz i=0;i<ia;i++) rp[i]=o2iu(xp[i]); dec(x); return r; }
|
||||
n_i32_1: while (i<ia) if (!isF64(xp[i++])) return x;
|
||||
f64* rp; B r = m_f64arrc(&rp, x); for (usz i=0;i<ia;i++) rp[i]=o2fu(xp[i]); dec(x); return r;
|
||||
goto r_or;
|
||||
}
|
||||
|
||||
SGetU(x)
|
||||
for (; i < ia; i++) {
|
||||
B cr = GetU(x,i);
|
||||
if (!q_i32(cr)) goto n_i32_2;
|
||||
if (RARE(!q_i32(cr))) {
|
||||
while (i<ia) if (!isF64(GetU(x,i++))) return x;
|
||||
goto r_f64;
|
||||
}
|
||||
i32 c = o2iu(cr);
|
||||
or|= c<0?-c:c;
|
||||
}
|
||||
if (or<=I8_MAX ) { i8* rp; B r = m_i8arrc (&rp, x); for (usz i=0;i<ia;i++) rp[i]=o2iu(GetU(x,i)); dec(x); return r; }
|
||||
else if (or<=I16_MAX) { i16* rp; B r = m_i16arrc(&rp, x); for (usz i=0;i<ia;i++) rp[i]=o2iu(GetU(x,i)); dec(x); return r; }
|
||||
else { i32* rp; B r = m_i32arrc(&rp, x); for (usz i=0;i<ia;i++) rp[i]=o2iu(GetU(x,i)); dec(x); return r; }
|
||||
n_i32_2: while (i<ia) if (!isF64(GetU(x,i++))) return x;
|
||||
f64* rp; B r = m_f64arrc(&rp, x); for (usz i=0;i<ia;i++) rp[i]=o2fu(GetU(x,i)); dec(x); return r;
|
||||
r_or:
|
||||
if (or<=I8_MAX ) goto r_i8;
|
||||
else if (or<=I16_MAX) goto r_i16;
|
||||
else goto r_i32;
|
||||
|
||||
r_i8 : return toI8Any(x);
|
||||
r_i16: return toI16Any(x);
|
||||
r_i32: return toI32Any(x);
|
||||
r_f64: return toF64Any(x);
|
||||
}
|
||||
B chr_squeeze(B x) {
|
||||
usz ia = a(x)->ia;
|
||||
@ -539,19 +543,17 @@ B chr_squeeze(B x) {
|
||||
if (!isC32(xp[i])) return x;
|
||||
or|= o2cu(xp[i]);
|
||||
}
|
||||
if (or<=U8_MAX ) { u8* rp; B r = m_c8arrc (&rp, x); for (usz i=0;i<ia;i++) rp[i]=o2cu(xp[i]); dec(x); return r; }
|
||||
else if (or<=U16_MAX) { u16* rp; B r = m_c16arrc(&rp, x); for (usz i=0;i<ia;i++) rp[i]=o2cu(xp[i]); dec(x); return r; }
|
||||
else { u32* rp; B r = m_c32arrc(&rp, x); for (usz i=0;i<ia;i++) rp[i]=o2cu(xp[i]); dec(x); return r; }
|
||||
} else {
|
||||
SGetU(x)
|
||||
for (; i < ia; i++) {
|
||||
B cr = GetU(x,i);
|
||||
if (!isC32(cr)) return x;
|
||||
or|= o2cu(cr);
|
||||
}
|
||||
}
|
||||
SGetU(x)
|
||||
for (; i < ia; i++) {
|
||||
B cr = GetU(x,i);
|
||||
if (!isC32(cr)) return x;
|
||||
or|= o2cu(cr);
|
||||
}
|
||||
if (or<=U8_MAX ) { u8* rp; B r = m_c8arrc (&rp, x); for (usz i=0;i<ia;i++) rp[i]=o2cu(GetU(x,i)); dec(x); return r; }
|
||||
else if (or<=U16_MAX) { u16* rp; B r = m_c16arrc(&rp, x); for (usz i=0;i<ia;i++) rp[i]=o2cu(GetU(x,i)); dec(x); return r; }
|
||||
else { u32* rp; B r = m_c32arrc(&rp, x); for (usz i=0;i<ia;i++) rp[i]=o2cu(GetU(x,i)); dec(x); return r; }
|
||||
if (or<=U8_MAX ) return toC8Any(x);
|
||||
else if (or<=U16_MAX) return toC16Any(x);
|
||||
else return toC32Any(x);
|
||||
}
|
||||
|
||||
B any_squeeze(B x) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user