random utility functions
This commit is contained in:
parent
f58af495bc
commit
f0a602ccde
11
src/c32arr.c
11
src/c32arr.c
@ -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;
|
||||
|
||||
11
src/f64arr.c
11
src/f64arr.c
@ -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;
|
||||
|
||||
1
src/h.h
1
src/h.h
@ -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); }
|
||||
|
||||
Loading…
Reference in New Issue
Block a user