summaryrefslogtreecommitdiff
path: root/src/vec2sw.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vec2sw.c')
-rw-r--r--src/vec2sw.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/vec2sw.c b/src/vec2sw.c
new file mode 100644
index 0000000..0e1aec0
--- /dev/null
+++ b/src/vec2sw.c
@@ -0,0 +1,23 @@
+#include "vec2sw.h"
+#include "slidingwindow.h"
+#include "vec2.h"
+
+vec2d_sw_soa_t vec2d_sw_soa(smrt_arena_t *arena, u64 size) {
+ vec2d_sw_soa_t vs = { .size=size };
+ vs.xs = SMRTA_ALLOC_SLIDINGWINDOW(arena, f64, size);
+ vs.ys = SMRTA_ALLOC_SLIDINGWINDOW(arena, f64, size);
+ return vs;
+}
+
+void vec2d_sw_soa_insert(vec2d_sw_soa_t sw_vs, vec2d_t v) {
+ sw_insert(sw_vs.xs, (void*)&v.x);
+ sw_insert(sw_vs.ys, (void*)&v.y);
+}
+
+vec2d_soa_t vec2d_sw_soa_get(vec2d_sw_soa_t sw_vs) {
+ return (vec2d_soa_t){
+ .size = sw_vs.xs->num_elements,
+ .xs = SLIDINGWINDOW_GET(sw_vs.xs, f64),
+ .ys = SLIDINGWINDOW_GET(sw_vs.ys, f64),
+ };
+}