From 3d1600ece6e3b5e734703f9b6fe9ee282cf51bf1 Mon Sep 17 00:00:00 2001 From: Max Wash Date: Mon, 4 May 2026 22:53:23 +0100 Subject: [PATCH] fx: value: implement copy and unset functions --- fx/include/fx/value.h | 4 ++++ fx/value.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/fx/include/fx/value.h b/fx/include/fx/value.h index 55dabc5..96b45d5 100644 --- a/fx/include/fx/value.h +++ b/fx/include/fx/value.h @@ -70,7 +70,11 @@ typedef struct fx_value { FX_API void fx_value_init(fx_value *v, fx_type type); FX_API void fx_value_init_primitive(fx_value *v, fx_value_type type); +FX_API void fx_value_copy(fx_value *dst, fx_value *src); +FX_API void fx_value_copy_array(fx_value *dst, fx_value *src, size_t count); + FX_API void fx_value_unset(fx_value *v); +FX_API void fx_value_unset_array(fx_value *v, size_t length); FX_API void fx_value_set_bool(fx_value *v, bool b); FX_API void fx_value_set_int(fx_value *v, intptr_t i); diff --git a/fx/value.c b/fx/value.c index 044b29d..82e2ca9 100644 --- a/fx/value.c +++ b/fx/value.c @@ -13,8 +13,36 @@ void fx_value_init_primitive(fx_value *v, fx_value_type type) { } +void fx_value_copy(fx_value *dst, fx_value *src) +{ + memcpy(dst, src, sizeof *dst); + + if (dst->v_type.t_primitive > __FX_VALUE_TYPE_OBJECT_BOUNDARY) { + fx_object_ref(dst->v_object); + } +} + +void fx_value_copy_array(fx_value *dst, fx_value *src, size_t count) +{ + for (size_t i = 0; i < count; i++) { + fx_value_copy(dst + i, src + i); + } +} + void fx_value_unset(fx_value *v) { + if (v->v_type.t_primitive > __FX_VALUE_TYPE_OBJECT_BOUNDARY) { + fx_object_unref(v->v_object); + } + + memset(v, 0x0, sizeof *v); +} + +void fx_value_unset_array(fx_value *v, size_t count) +{ + for (size_t i = 0; i < count; i++) { + fx_value_unset(v + i); + } } void fx_value_set_bool(fx_value *v, bool b)