random utility functions

This commit is contained in:
dzaima 2021-04-28 12:22:51 +03:00
parent f58af495bc
commit f0a602ccde
3 changed files with 23 additions and 0 deletions

View File

@ -37,6 +37,17 @@ NOINLINE B m_str32(u32* s) {
return r;
}
C32Arr* toC32Arr(B x) {
if (v(x)->type==t_c32arr) return c(C32Arr,x);
B r = m_c32arrc(x);
u32* rp = c32arr_ptr(r);
usz ia = a(r)->ia;
BS2B xgetU = TI(x).get;
for (usz i = 0; i < ia; i++) rp[i] = o2c(xgetU(x,i));
dec(x);
return c(C32Arr,r);
}
typedef struct C32Slice {
struct Slice;
u32* a;

View File

@ -31,6 +31,17 @@ B m_caf64(usz sz, f64* a) {
return r;
}
F64Arr* toF64Arr(B x) {
if (v(x)->type==t_f64arr) return c(F64Arr,x);
B r = m_f64arrc(x);
f64* rp = f64arr_ptr(r);
usz ia = a(r)->ia;
BS2B xgetU = TI(x).get;
for (usz i = 0; i < ia; i++) rp[i] = o2f(xgetU(x,i));
dec(x);
return c(F64Arr,r);
}
typedef struct F64Slice {
struct Slice;
f64* a;

View File

@ -320,6 +320,7 @@ usz o2s (B x) { if ((usz)x.f!=x.f) thrM("Expected integer"); return (usz)x.f;
i64 o2i64 (B x) { if ((i64)x.f!=x.f) thrM("Expected integer"); return (i64)x.f; }
f64 o2f (B x) { if (!isNum(x)) thrM("Expected integer"); return x.f; }
i32 o2iu (B x) { return isI32(x)? (i32)(u32)x.u : (i32)x.f; }
usz o2c (B x) { if (!isC32(x)) thrM("Expected character"); return (u32)x.u; }
usz o2su (B x) { return (usz)x.f; }
i64 o2i64u(B x) { return (i64)x.f; }
bool q_i32(B x) { return isI32(x) || isF64(x)&(x.f==(i32)x.f); }