From 8aa0687ef96bcdfb3d1ded77023cb035f8a20d44 Mon Sep 17 00:00:00 2001 From: dzaima Date: Sun, 5 Sep 2021 01:10:40 +0300 Subject: [PATCH] reorganize typed arr files --- src/builtins/md1.c | 2 +- src/builtins/sysfn.c | 2 +- src/core/c32arr.c | 40 +++++++++++++++++++--------------------- src/core/c32arr.h | 7 +++---- src/core/f64arr.c | 14 +++++++------- src/core/f64arr.h | 5 +++-- src/core/i32arr.c | 12 ++++++------ src/core/i32arr.h | 4 ++-- 8 files changed, 42 insertions(+), 44 deletions(-) diff --git a/src/builtins/md1.c b/src/builtins/md1.c index 1a425635..bd08ebcb 100644 --- a/src/builtins/md1.c +++ b/src/builtins/md1.c @@ -323,7 +323,7 @@ B timed_c1(B d, B x) { B f = c(Md1D,d)->f; u64 sns = nsTime(); dec(c1(f, x)); u64 ens = nsTime(); - return m_f64((ens-sns)/1e9); + return m_f64((ens-sns)*1e-9); } diff --git a/src/builtins/sysfn.c b/src/builtins/sysfn.c index 2665b7e8..7670bf0d 100644 --- a/src/builtins/sysfn.c +++ b/src/builtins/sysfn.c @@ -551,7 +551,7 @@ B monoTime_c1(B t, B x) { dec(x); struct timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts); - return m_f64(ts.tv_sec + ts.tv_nsec/1e9); + return m_f64(ts.tv_sec + ts.tv_nsec*1e-9); } B delay_c1(B t, B x) { f64 sf = o2f(x); diff --git a/src/core/c32arr.c b/src/core/c32arr.c index d8286f84..6537e465 100644 --- a/src/core/c32arr.c +++ b/src/core/c32arr.c @@ -1,24 +1,5 @@ #include "../core.h" -B m_str8(usz sz, char* s) { - u32* rp; B r = m_c32arrv(&rp, sz); - for (u64 i = 0; i < sz; i++) rp[i] = (u32)s[i]; - return r; -} -B m_str8l(char* s) { - usz sz = strlen(s); - u32* rp; B r = m_c32arrv(&rp, sz); - for (u64 i = 0; i < sz; i++) rp[i] = (u32)s[i]; - return r; -} - -B m_str32(u32* s) { - usz sz = 0; while(s[sz]) sz++; - u32* rp; B r = m_c32arrv(&rp, sz); - for (usz i = 0; i < sz; i++) rp[i] = s[i]; - return r; -} - static Arr* m_c32slice(Arr* p, u32* ptr, usz ia) { C32Slice* r = m_arr(sizeof(C32Slice), t_c32slice, ia); r->p = p; @@ -32,8 +13,6 @@ static B c32arr_get (B x, usz n) { VTY(x,t_c32arr ); return m_c32(c(C32Arr ,x static B c32slice_get(B x, usz n) { VTY(x,t_c32slice); return m_c32(c(C32Slice,x)->a[n]); } static bool c32arr_canStore(B x) { return isC32(x); } - - void c32arr_init() { TIi(t_c32arr,get) = c32arr_get; TIi(t_c32slice,get) = c32slice_get; TIi(t_c32arr,getU) = c32arr_get; TIi(t_c32slice,getU) = c32slice_get; @@ -53,3 +32,22 @@ void c32arr_init() { fillarr_setFill(emptySVec, emptyCVec()); bi_emptySVec = taga(emptySVec); gc_add(bi_emptySVec); } + +B m_str8(usz sz, char* s) { + u32* rp; B r = m_c32arrv(&rp, sz); + for (u64 i = 0; i < sz; i++) rp[i] = (u32)s[i]; + return r; +} +B m_str8l(char* s) { + usz sz = strlen(s); + u32* rp; B r = m_c32arrv(&rp, sz); + for (u64 i = 0; i < sz; i++) rp[i] = (u32)s[i]; + return r; +} + +B m_str32(u32* s) { + usz sz = 0; while(s[sz]) sz++; + u32* rp; B r = m_c32arrv(&rp, sz); + for (usz i = 0; i < sz; i++) rp[i] = s[i]; + return r; +} diff --git a/src/core/c32arr.h b/src/core/c32arr.h index c3cdc0bf..ba7da262 100644 --- a/src/core/c32arr.h +++ b/src/core/c32arr.h @@ -27,13 +27,12 @@ static Arr* m_c32arrp(u32** p, usz ia) { return (Arr*)r; } -B m_str8(usz sz, char* s); -B m_str8l(char* s); -B m_str32(u32* s); - static u32* c32arr_ptr(B x) { VTY(x, t_c32arr); return c(C32Arr,x)->a; } static u32* c32any_ptr(B x) { assert(isArr(x)); u8 t=v(x)->type; if(t==t_c32arr) return c(C32Arr,x)->a; assert(t==t_c32slice); return c(C32Slice,x)->a; } +B m_str8(usz sz, char* s); +B m_str8l(char* s); +B m_str32(u32* s); static C32Arr* toC32Arr(B x) { if (v(x)->type==t_c32arr) return c(C32Arr,x); diff --git a/src/core/f64arr.c b/src/core/f64arr.c index a12d1c0a..3605380c 100644 --- a/src/core/f64arr.c +++ b/src/core/f64arr.c @@ -1,18 +1,12 @@ #include "../core.h" -NOINLINE B m_caf64(usz sz, f64* a) { - f64* rp; B r = m_f64arrv(&rp, sz); - for (usz i = 0; i < sz; i++) rp[i] = a[i]; - return r; -} - static Arr* m_f64slice(Arr* p, f64* ptr, usz ia) { F64Slice* r = m_arr(sizeof(F64Slice), t_f64slice, ia); r->p = p; r->a = ptr; return (Arr*)r; } -static Arr* f64arr_slice (B x, usz s, usz ia) { return m_f64slice(a(x), c(F64Arr ,x)->a+s, ia); } +static Arr* f64arr_slice (B x, usz s, usz ia) { return m_f64slice(a(x), c(F64Arr,x)->a+s, ia); } static Arr* f64slice_slice(B x, usz s, usz ia) { Arr* p=c(Slice,x)->p; ptr_inc(p); Arr* r = m_f64slice(p, c(F64Slice,x)->a+s, ia); dec(x); return r; } static B f64arr_get (B x, usz n) { VTY(x,t_f64arr ); return m_f64(c(F64Arr ,x)->a[n]); } @@ -32,3 +26,9 @@ void f64arr_init() { TIi(t_f64arr,elType) = el_f64; TIi(t_f64slice,elType) = el_f64; TIi(t_f64arr,canStore) = f64arr_canStore; } + +NOINLINE B m_caf64(usz sz, f64* a) { + f64* rp; B r = m_f64arrv(&rp, sz); + for (usz i = 0; i < sz; i++) rp[i] = a[i]; + return r; +} diff --git a/src/core/f64arr.h b/src/core/f64arr.h index a1490c10..285758dd 100644 --- a/src/core/f64arr.h +++ b/src/core/f64arr.h @@ -7,6 +7,7 @@ typedef struct F64Slice { f64* a; } F64Slice; + #define F64A_SZ(IA) fsizeof(F64Arr,a,f64,IA) static B m_f64arrv(f64** p, usz ia) { F64Arr* r = m_arr(F64A_SZ(ia), t_f64arr, ia); @@ -26,11 +27,11 @@ static Arr* m_f64arrp(f64** p, usz ia) { return (Arr*)r; } -B m_caf64(usz sz, f64* a); - static f64* f64arr_ptr(B x) { VTY(x, t_f64arr); return c(F64Arr,x)->a; } static 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; } +B m_caf64(usz sz, f64* a); + static F64Arr* toF64Arr(B x) { if (v(x)->type==t_f64arr) return c(F64Arr,x); f64* rp; B r = m_f64arrc(&rp, x); diff --git a/src/core/i32arr.c b/src/core/i32arr.c index 9493dca1..65405bbe 100644 --- a/src/core/i32arr.c +++ b/src/core/i32arr.c @@ -1,11 +1,5 @@ #include "../core.h" -NOINLINE B m_cai32(usz ia, i32* a) { - i32* rp; B r = m_i32arrv(&rp, ia); - for (usz i = 0; i < ia; i++) rp[i] = a[i]; - return r; -} - static Arr* m_i32slice(Arr* p, i32* ptr, usz ia) { I32Slice* r = m_arr(sizeof(I32Slice), t_i32slice, ia); r->p = p; @@ -33,3 +27,9 @@ void i32arr_init() { TIi(t_i32arr,canStore) = i32arr_canStore; i32* tmp; bi_emptyIVec = m_i32arrv(&tmp, 0); gc_add(bi_emptyIVec); } + +NOINLINE B m_cai32(usz ia, i32* a) { + i32* rp; B r = m_i32arrv(&rp, ia); + for (usz i = 0; i < ia; i++) rp[i] = a[i]; + return r; +} diff --git a/src/core/i32arr.h b/src/core/i32arr.h index 0de349d8..234be405 100644 --- a/src/core/i32arr.h +++ b/src/core/i32arr.h @@ -27,11 +27,11 @@ static Arr* m_i32arrp(i32** p, usz ia) { return (Arr*)r; } -B m_cai32(usz ia, i32* a); - static i32* i32arr_ptr(B x) { VTY(x, t_i32arr); return c(I32Arr,x)->a; } static 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; } +B m_cai32(usz ia, i32* a); + static I32Arr* toI32Arr(B x) { // assumes it's possible if (v(x)->type==t_i32arr) return c(I32Arr,x); i32* rp; B r = m_i32arrc(&rp, x);