template some stuff
authorhgn <hgodden00@gmail.com>
Sun, 17 Aug 2025 00:23:54 +0000 (00:23 +0000)
committerhgn <hgodden00@gmail.com>
Sun, 17 Aug 2025 00:23:54 +0000 (00:23 +0000)
vg_kv.c
vg_kv.h

diff --git a/vg_kv.c b/vg_kv.c
index 8142bee16a1c4ec4962a4c64b8d685d4517d0be7..d8fb48768ce1bc0089afa5f806a0b824672b7b84 100644 (file)
--- a/vg_kv.c
+++ b/vg_kv.c
@@ -209,42 +209,33 @@ const c8 *vg_kv_read_string( vg_kvs *kvs, u32 root_offset, const c8 *key, const
    return value? value: default_value;
 }
 
+#define VG_KV_APPEND_TEMPLATE( FUNCTION, ... )                 \
+   c8 formatted[ 1024 ];                                       \
+   vg_str value_str;                                           \
+   vg_strnull( &value_str, formatted, sizeof(formatted) );     \
+   for( u32 i=0; i<len; i++ )                                  \
+   {                                                           \
+      FUNCTION ( &value_str, values[i], __VA_ARGS__ );         \
+      if( i+1!=len )                                           \
+         vg_strcatch( &value_str, ' ' );                       \
+   }                                                           \
+   if( !vg_strgood( &value_str ) )                             \
+      return 0;                                                \
+   return vg_kv_append( kvs, parent_offset, key, formatted );  
+
 u32 vg_kv_append_vu32( vg_kvs *kvs, u32 parent_offset, const c8 *key, u32 *values, u32 len )
 {
-   c8 formatted[ 1024 ];
-   vg_str value_str;
-   vg_strnull( &value_str, formatted, sizeof(formatted) );
-
-   for( u32 i=0; i<len; i++ )
-   {
-      vg_strcatu64( &value_str, values[i], 10 );
-      if( i+1!=len )
-         vg_strcatch( &value_str, ' ' );
-   }
-
-   if( !vg_strgood( &value_str ) )
-      return 0;
+   VG_KV_APPEND_TEMPLATE( vg_strcatu64, 10 )
+}
 
-   return vg_kv_append( kvs, parent_offset, key, formatted );
+u32 vg_kv_append_vi32( vg_kvs *kvs, u32 parent_offset, const c8 *key, i32 *values, u32 len )
+{
+   VG_KV_APPEND_TEMPLATE( vg_strcati64, 10 )
 }
 
 u32 vg_kv_append_vf32( vg_kvs *kvs, u32 parent_offset, const c8 *key, f32 *values, u32 len )
 {
-   c8 formatted[ 1024 ];
-   vg_str value_str;
-   vg_strnull( &value_str, formatted, sizeof(formatted) );
-
-   for( u32 i=0; i<len; i++ )
-   {
-      vg_strcatf64( &value_str, values[i], 10, 5 );
-      if( i+1!=len )
-         vg_strcatch( &value_str, ' ' );
-   }
-
-   if( !vg_strgood( &value_str ) )
-      return 0;
-
-   return vg_kv_append( kvs, parent_offset, key, formatted );
+   VG_KV_APPEND_TEMPLATE( vg_strcatf64, 10, 5 )
 }
 
 /* 
diff --git a/vg_kv.h b/vg_kv.h
index 0d96b829919dd606df7d97cd313983f13fcd67f1..41f17b6f648019c210ce3559b8ada7cbe00c4a73 100644 (file)
--- a/vg_kv.h
+++ b/vg_kv.h
@@ -3,6 +3,7 @@
 #else
 
 #define VG_KV_PAGE_COUNT 32
+#define VG_KV_APPEND_FRAME NULL
 
 /* define VG_MSG_TO_KVS to automatically convert from old vg_msg stream to plain text KVs */
 
@@ -54,6 +55,7 @@ const c8 *vg_kv_read_string( vg_kvs *kvs, u32 root_offset, const c8 *key, const
  *  returns the new KV offset
  */
 u32 vg_kv_append( vg_kvs *kvs, u32 parent_offset, const c8 *key, const c8 *value );
+u32 vg_kv_append_vi32( vg_kvs *kvs, u32 parent_offset, const c8 *key, i32 *values, u32 len );
 u32 vg_kv_append_vu32( vg_kvs *kvs, u32 parent_offset, const c8 *key, u32 *values, u32 len );
 u32 vg_kv_append_vf32( vg_kvs *kvs, u32 parent_offset, const c8 *key, f32 *values, u32 len );