f64any_ptr
This commit is contained in:
parent
765098f485
commit
dd3c420bf3
30
src/f64arr.c
30
src/f64arr.c
@ -23,9 +23,22 @@ B m_f64arrp(usz ia) { // doesn't write shape/rank
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
f64* f64arr_ptr(B x) { VT(x, t_f64arr); return c(F64Arr,x)->a; }
|
typedef struct F64Slice {
|
||||||
|
struct Slice;
|
||||||
|
f64* a;
|
||||||
|
} F64Slice;
|
||||||
|
B m_f64slice(B p, f64* ptr) {
|
||||||
|
F64Slice* r = mm_allocN(sizeof(F64Slice), t_f64slice);
|
||||||
|
r->p = p;
|
||||||
|
r->a = ptr;
|
||||||
|
return tag(r, ARR_TAG);
|
||||||
|
}
|
||||||
|
|
||||||
B m_caf64(usz sz, f64* a) {
|
|
||||||
|
f64* f64arr_ptr(B x) { VT(x, t_f64arr); return c(F64Arr,x)->a; }
|
||||||
|
f64* f64any_ptr(B x) { assert(isArr(x)); u8 t=v(x)->type; if(t==t_f64arr) return c(F64Arr,x)->a; assert(t==t_f64slice); return c(F64Slice,x)->a; }
|
||||||
|
|
||||||
|
NOINLINE B m_caf64(usz sz, f64* a) {
|
||||||
B r = m_f64arrv(sz); f64* rp = f64arr_ptr(r);
|
B r = m_f64arrv(sz); f64* rp = f64arr_ptr(r);
|
||||||
for (usz i = 0; i < sz; i++) rp[i] = a[i];
|
for (usz i = 0; i < sz; i++) rp[i] = a[i];
|
||||||
return r;
|
return r;
|
||||||
@ -42,25 +55,12 @@ F64Arr* toF64Arr(B x) {
|
|||||||
return c(F64Arr,r);
|
return c(F64Arr,r);
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct F64Slice {
|
|
||||||
struct Slice;
|
|
||||||
f64* a;
|
|
||||||
} F64Slice;
|
|
||||||
B m_f64slice(B p, f64* ptr) {
|
|
||||||
F64Slice* r = mm_allocN(sizeof(F64Slice), t_f64slice);
|
|
||||||
r->p = p;
|
|
||||||
r->a = ptr;
|
|
||||||
return tag(r, ARR_TAG);
|
|
||||||
}
|
|
||||||
|
|
||||||
B f64arr_slice (B x, usz s) {return m_f64slice(x , c(F64Arr ,x)->a+s); }
|
B f64arr_slice (B x, usz s) {return m_f64slice(x , c(F64Arr ,x)->a+s); }
|
||||||
B f64slice_slice(B x, usz s) { B r = m_f64slice(inc(c(Slice,x)->p), c(F64Slice,x)->a+s); dec(x); return r; }
|
B f64slice_slice(B x, usz s) { B r = m_f64slice(inc(c(Slice,x)->p), c(F64Slice,x)->a+s); dec(x); return r; }
|
||||||
|
|
||||||
|
|
||||||
B f64arr_get (B x, usz n) { VT(x,t_f64arr ); return m_f64(c(F64Arr ,x)->a[n]); }
|
B f64arr_get (B x, usz n) { VT(x,t_f64arr ); return m_f64(c(F64Arr ,x)->a[n]); }
|
||||||
B f64slice_get(B x, usz n) { VT(x,t_f64slice); return m_f64(c(F64Slice,x)->a[n]); }
|
B f64slice_get(B x, usz n) { VT(x,t_f64slice); return m_f64(c(F64Slice,x)->a[n]); }
|
||||||
f64* f64arr_f64p(B x) { return c(F64Arr ,x)->a; }
|
|
||||||
f64* f64slice_f64p(B x) { return c(F64Slice,x)->a; }
|
|
||||||
void f64arr_free(B x) { decSh(x); }
|
void f64arr_free(B x) { decSh(x); }
|
||||||
bool f64arr_canStore(B x) { return q_f64(x); }
|
bool f64arr_canStore(B x) { return q_f64(x); }
|
||||||
|
|
||||||
|
|||||||
@ -23,8 +23,6 @@ B m_i32arrp(usz ia) { // doesn't write shape/rank
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct I32Slice {
|
typedef struct I32Slice {
|
||||||
struct Slice;
|
struct Slice;
|
||||||
i32* a;
|
i32* a;
|
||||||
@ -36,12 +34,12 @@ B m_i32slice(B p, i32* ptr) {
|
|||||||
return tag(r, ARR_TAG);
|
return tag(r, ARR_TAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
i32* i32arr_ptr(B x) { VT(x, t_i32arr); return c(I32Arr,x)->a; }
|
i32* i32arr_ptr(B x) { VT(x, t_i32arr); return c(I32Arr,x)->a; }
|
||||||
i32* i32any_ptr(B x) { assert(isArr(x)); u8 t=v(x)->type; if(t==t_i32arr) return c(I32Arr,x)->a; assert(t==t_i32slice); return c(I32Slice,x)->a; }
|
i32* i32any_ptr(B x) { assert(isArr(x)); u8 t=v(x)->type; if(t==t_i32arr) return c(I32Arr,x)->a; assert(t==t_i32slice); return c(I32Slice,x)->a; }
|
||||||
|
|
||||||
NOINLINE B m_cai32(usz ia, i32* a) {
|
NOINLINE B m_cai32(usz ia, i32* a) {
|
||||||
B r = m_i32arrv(ia);
|
B r = m_i32arrv(ia); i32* rp = i32arr_ptr(r);
|
||||||
i32* rp = i32arr_ptr(r);
|
|
||||||
for (usz i = 0; i < ia; i++) rp[i] = a[i];
|
for (usz i = 0; i < ia; i++) rp[i] = a[i];
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user