From c14eb033f2577e6ccd25bb5c06e56896e7b45ff8 Mon Sep 17 00:00:00 2001 From: hgn Date: Sun, 20 Jul 2025 08:53:23 +0000 Subject: [PATCH] doesnt work --- vg_kv.c | 53 ++++++++++++++++++++++++++++------------------------- vg_kv.h | 22 +++++++++++----------- vg_msg.c | 26 ++++++++++++++++++++++++-- 3 files changed, 63 insertions(+), 38 deletions(-) diff --git a/vg_kv.c b/vg_kv.c index 09dc8d0..aaf68a9 100644 --- a/vg_kv.c +++ b/vg_kv.c @@ -1,11 +1,5 @@ #include "vg_kv.h" -void vg_kvs_init( vg_kvs *kvs, vg_stack_allocator *stack ) -{ - vg_zero_mem( kvs, sizeof(vg_kvs) ); - kvs->stack = stack; -} - static vg_kv *vg_kvs_newkv( vg_kvs *kvs ) { void *kv_page; @@ -26,7 +20,16 @@ static vg_kv *vg_kvs_newkv( vg_kvs *kvs ) return kv; } -static u32 vg_kv_string_append( vg_kvs *kvs, const char *string ) +void vg_kvs_init( vg_kvs *kvs, vg_stack_allocator *stack ) +{ + vg_zero_mem( kvs, sizeof(vg_kvs) ); + kvs->stack = stack; + + vg_kv *root_kv = vg_kvs_newkv( kvs ); + kvs->root_offset = vg_stack_offset( kvs->stack, root_kv ); +} + +static u32 vg_kv_string_append( vg_kvs *kvs, c8 *string ) { if( string == NULL ) return 0; @@ -35,7 +38,7 @@ static u32 vg_kv_string_append( vg_kvs *kvs, const char *string ) return vg_stack_offset( kvs->stack, buf ); } -u32 vg_kv_append( vg_kvs *kvs, u32 parent_offset, const char *key, const char *value ) +u32 vg_kv_append( vg_kvs *kvs, u32 parent_offset, c8 *key, c8 *value ) { vg_kv *kv = vg_kvs_newkv( kvs ); u32 key_offset = vg_kv_string_append( kvs, key ), @@ -72,14 +75,14 @@ u32 vg_kv_append( vg_kvs *kvs, u32 parent_offset, const char *key, const char *v return kv_offset; } -void vg_kv_parser_init( vg_kv_parser *parser, vg_kvs *out_kvs ) +void vg_kv_parser_init( vg_kv_parser *parser, vg_kvs *out_kvs, u32 root_offset ) { + VG_ASSERT( out_kvs->stack ); + VG_ASSERT( out_kvs->kv_page_count ); + vg_zero_mem( parser, sizeof(vg_kv_parser) ); parser->kvs = out_kvs; - - vg_kv *root_kv = vg_kvs_newkv( parser->kvs ); - out_kvs->root_offset = vg_stack_offset( parser->kvs->stack, root_kv ); - parser->frame_stack[0].frame_offset = out_kvs->root_offset; + parser->frame_stack[0].frame_offset = root_offset; } void vg_kv_link( vg_kv_parser *parser, u32 offset, u32 depth ) @@ -98,7 +101,7 @@ void vg_kv_link( vg_kv_parser *parser, u32 offset, u32 depth ) parser->frame_stack[ depth ].latest_child_offset = offset; } -void vg_kv_parse_buffer( vg_kv_parser *parser, const char *buffer, u32 buffer_length ) +void vg_kv_parse_buffer( vg_kv_parser *parser, c8 *buffer, u32 buffer_length ) { if( buffer_length == 0 ) buffer_length = 0xffffffff; @@ -227,14 +230,14 @@ u32 vg_kv_type( vg_kvs *kvs, u32 kv_offset ) return (kv->key_info >> 30) & 0x3; } -const char *vg_kv_key( vg_kvs *kvs, u32 kv_offset, u32 *out_length ) +c8 *vg_kv_key( vg_kvs *kvs, u32 kv_offset, u32 *out_length ) { vg_kv *kv = vg_stack_pointer( kvs->stack, kv_offset ); *out_length = (kv->key_info >> 20) & 0x3FF; return (*out_length)? vg_stack_pointer( kvs->stack, kv->key_offset ): NULL; } -const char *vg_kv_value( vg_kvs *kvs, u32 kv_offset, u32 *out_length ) +c8 *vg_kv_value( vg_kvs *kvs, u32 kv_offset, u32 *out_length ) { if( vg_kv_type( kvs, kv_offset ) == 0x0 ) return NULL; @@ -269,7 +272,7 @@ u32 vg_kv_child( vg_kvs *kvs, u32 root_offset, u32 index ) else return 0; } -u32 vg_kv_find( vg_kvs *kvs, u32 root_offset, const char *key ) +u32 vg_kv_find( vg_kvs *kvs, u32 root_offset, c8 *key ) { u32 hash = vg_strdjb2( key ); u32 child_offset = vg_kv_child( kvs, root_offset, 0 ); @@ -277,11 +280,11 @@ u32 vg_kv_find( vg_kvs *kvs, u32 root_offset, const char *key ) { vg_kv *kv = vg_stack_pointer( kvs->stack, child_offset ); u32 key_length; - const char *child_key = vg_kv_key( kvs, child_offset, &key_length ); + c8 *child_key = vg_kv_key( kvs, child_offset, &key_length ); if( ((kv->key_info ^ hash) & 0xFFFFF) == 0 ) { u32 key_length; - const char *child_key = vg_kv_key( kvs, child_offset, &key_length ); + c8 *child_key = vg_kv_key( kvs, child_offset, &key_length ); if( child_key ) { for( u32 i=0; ifp ); } -static void vg_kv_write_string( vg_kv_write *w, const char *string, u32 length ) +static void vg_kv_write_string( vg_kv_write *w, c8 *string, u32 length ) { if( length == 0 ) length = 0xffffffff; @@ -338,7 +341,7 @@ static void vg_kv_write_string( vg_kv_write *w, const char *string, u32 length ) if( delim ) fputc( delim, w->fp ); } -void vg_kv_write_block( vg_kv_write *w, const char *name, u32 name_length ) +void vg_kv_write_block( vg_kv_write *w, c8 *name, u32 name_length ) { vg_kv_write_indent( w ); if( name ) @@ -361,7 +364,7 @@ void vg_kv_end_block( vg_kv_write *w ) fputc( '\n', w->fp ); } -void vg_kv_write_kv( vg_kv_write *w, const char *key, u32 key_len, const char *value, u32 value_len ) +void vg_kv_write_kv( vg_kv_write *w, c8 *key, u32 key_len, c8 *value, u32 value_len ) { vg_kv_write_indent( w ); vg_kv_write_string( w, key, key_len ); @@ -387,7 +390,7 @@ void vg_kv_print_tree( vg_kv_write *w, vg_kvs *kvs, u32 root_offset ) VG_ASSERT( vg_kv_type( kvs, root_offset ) == 0x0 ); u32 root_len; - const char *root_str = vg_kv_key( kvs, root_offset, &root_len ); + c8 *root_str = vg_kv_key( kvs, root_offset, &root_len ); vg_kv_write_block( w, root_str, root_len ); u32 child_offset = vg_kv_child( kvs, root_offset, 0 ); @@ -398,10 +401,10 @@ void vg_kv_print_tree( vg_kv_write *w, vg_kvs *kvs, u32 root_offset ) else { u32 key_len; - const char *key_str = vg_kv_key( kvs, child_offset, &key_len ); + c8 *key_str = vg_kv_key( kvs, child_offset, &key_len ); u32 value_len; - const char *value_str = vg_kv_value( kvs, child_offset, &value_len ); + c8 *value_str = vg_kv_value( kvs, child_offset, &value_len ); if( key_str && value_str ) vg_kv_write_kv( w, key_str, key_len, value_str, value_len ); diff --git a/vg_kv.h b/vg_kv.h index 2ddd5f2..8976caa 100644 --- a/vg_kv.h +++ b/vg_kv.h @@ -4,7 +4,7 @@ #define VG_KV_PAGE_COUNT 32 -/* define VG_KV_SUPPORT_LEGACY_MSG to automatically convert from old vg_msg stream to plain text KVs */ +/* define VG_MSG_TO_KVS to automatically convert from old vg_msg stream to plain text KVs */ typedef struct vg_kv vg_kv; typedef struct vg_kvs vg_kvs; @@ -19,8 +19,8 @@ void vg_kvs_init( vg_kvs *kvs, vg_stack_allocator *stack ); * * vg_kv_parse_buffer takes a text buffer, if its null terminated, buffer_length can be 0 */ -void vg_kv_parser_init( vg_kv_parser *parser, vg_kvs *out_kvs ); -void vg_kv_parse_buffer( vg_kv_parser *parser, const char *buffer, u32 buffer_length ); +void vg_kv_parser_init( vg_kv_parser *parser, vg_kvs *out_kvs, u32 root_offset ); +void vg_kv_parse_buffer( vg_kv_parser *parser, c8 *buffer, u32 buffer_length ); void vg_kv_link( vg_kv_parser *parser, u32 offset, u32 depth ); /* returns the type of this KV. @@ -30,13 +30,13 @@ void vg_kv_link( vg_kv_parser *parser, u32 offset, u32 depth ); u32 vg_kv_type( vg_kvs *kvs, u32 kv_offset ); /* get key / values associated with KV pair or only key for a frame. */ -const char *vg_kv_key( vg_kvs *kvs, u32 kv_offset, u32 *out_length ); -const char *vg_kv_value( vg_kvs *kvs, u32 kv_offset, u32 *out_length ); +c8 *vg_kv_key( vg_kvs *kvs, u32 kv_offset, u32 *out_length ); +c8 *vg_kv_value( vg_kvs *kvs, u32 kv_offset, u32 *out_length ); /* get the child KV at index, returns 0 if out of range */ u32 vg_kv_child( vg_kvs *kvs, u32 root_offset, u32 index ); u32 vg_kv_next( vg_kvs *kvs, u32 kv_offset ); -u32 vg_kv_find( vg_kvs *kvs, u32 root_offset, const char *key ); +u32 vg_kv_find( vg_kvs *kvs, u32 root_offset, c8 *key ); /* editing kvs * if value is NULL, it appends a named frame @@ -44,12 +44,12 @@ u32 vg_kv_find( vg_kvs *kvs, u32 root_offset, const char *key ); * if both key and value are set, it appends a KV pair * returns the new KV offset */ -u32 vg_kv_append( vg_kvs *kvs, u32 parent_offset, const char *key, const char *value ); +u32 vg_kv_append( vg_kvs *kvs, u32 parent_offset, c8 *key, c8 *value ); /* Writing KV files. w should be initialized with depth 0, and fp to a valid C stream pointer */ -void vg_kv_write_block( vg_kv_write *w, const char *name, u32 name_length ); +void vg_kv_write_block( vg_kv_write *w, c8 *name, u32 name_length ); void vg_kv_end_block( vg_kv_write *w ); -void vg_kv_write_kv( vg_kv_write *w, const char *key, u32 key_len, const char *value, u32 value_len ); +void vg_kv_write_kv( vg_kv_write *w, c8 *key, u32 key_len, c8 *value, u32 value_len ); /* Just for analysis */ void vg_kv_parser_print_info( vg_kv_parser *parser ); @@ -64,8 +64,8 @@ struct vg_kv_parser u32 stat_memory_strings, stat_source_characters; - char token0_deliminator; - char *token0_buffer; + c8 token0_deliminator; + c8 *token0_buffer; u32 depth; struct diff --git a/vg_msg.c b/vg_msg.c index 3edea5b..35a937c 100644 --- a/vg_msg.c +++ b/vg_msg.c @@ -4,6 +4,7 @@ #include #include +#if !defined( VG_MSG_TO_KVS ) /* write a buffer from msg, rang checked. */ void vg_msg_wbuf( vg_msg *msg, u8 *buf, u32 len ) { @@ -17,6 +18,7 @@ void vg_msg_wbuf( vg_msg *msg, u8 *buf, u32 len ) msg->buf[ msg->cur.co ++ ] = buf[i]; } } +#endif /* read a buffer from msg, rang checked. */ void vg_msg_rbuf( vg_msg *msg, u8 *buf, u32 len ) @@ -32,6 +34,7 @@ void vg_msg_rbuf( vg_msg *msg, u8 *buf, u32 len ) } } +#if !defined( VG_MSG_TO_KVS ) /* write null terminated string to stream */ void vg_msg_wstr( vg_msg *msg, const char *str ) { @@ -41,6 +44,7 @@ void vg_msg_wstr( vg_msg *msg, const char *str ) if( !str[i] ) break; } } +#endif /* read null terminated string, range check and generate hash (djb2) */ const char *vg_msg_rstr( vg_msg *msg, u32 *djb2 ) @@ -62,6 +66,7 @@ const char *vg_msg_rstr( vg_msg *msg, u32 *djb2 ) return str; } +#if !defined( VG_MSG_TO_KVS ) /* begin a new frame in message stream */ void vg_msg_frame( vg_msg *msg, const char *name ) { @@ -100,6 +105,7 @@ void vg_msg_wkvbin( vg_msg *msg, const char *key, u8 *bin, u32 len ) vg_msg_wbuf( msg, (u8 *)(&len), 4 ); vg_msg_wbuf( msg, bin, len ); } +#endif u32 vg_msg_cmd_array_count( u8 code ) { @@ -123,6 +129,7 @@ u8 vg_msg_count_bits( u32 count ) return ((count-1)<<2); } +#if !defined( VG_MSG_TO_KVS ) /* write a sized type */ void vg_msg_wkvnum( vg_msg *msg, const char *key, u8 type, u8 count, void *data ) { @@ -131,6 +138,7 @@ void vg_msg_wkvnum( vg_msg *msg, const char *key, u8 type, u8 count, void *data vg_msg_wstr( msg, key ); vg_msg_wbuf( msg, data, vg_msg_cmd_bytecount(code) ); } +#endif void vg_msg_init( vg_msg *msg, u8 *buffer, u32 len ) { @@ -210,6 +218,7 @@ int vg_msg_next( vg_msg *msg, vg_msg_cmd *cmd ) return 1; } +#if !defined( VG_MSG_TO_KVS ) /* move through the frame(and subframes) until we fall out of it */ int vg_msg_skip_frame( vg_msg *msg ) { @@ -249,6 +258,7 @@ int vg_msg_seekframe( vg_msg *msg, const char *name ) msg->cur = orig; return 0; } +#endif /* * Convert any type integral type to u64 @@ -317,6 +327,7 @@ f64 vg_msg_cast_to_f64( const void *src, u8 src_base, u8 src_size ) return (f64)vg_msg_cast_to_i64( src, src_base, src_size ); } +#if !defined( VG_MSG_TO_KVS ) /* * Convert any full integral type code to another * Passing in non-integral codes is undefined @@ -362,6 +373,7 @@ void vg_msg_cast( const void *src, u8 src_code, void *dst, u8 dst_code ) } } } +#endif /* * search in current level from cursor, to find kv cmd @@ -391,6 +403,7 @@ int vg_msg_getkvcmd( vg_msg *msg, const char *key, vg_msg_cmd *cmd ) return 0; } +#if !defined( VG_MSG_TO_KVS ) /* * Read a integral KV out to dst, and perform conversion if needed * dst is always defined, if its not found its set to 0 @@ -423,7 +436,9 @@ const char *vg_msg_getkvstr( vg_msg *msg, const char *key ) else return NULL; } +#endif +#if !defined( VG_MSG_TO_KVS ) int vg_msg_getkvvecf( vg_msg *msg, const char *key, u8 type, void *v, void *default_value ) { @@ -508,10 +523,11 @@ void vg_msg_print( vg_msg *msg, u32 len ) } } } +#endif -#ifdef VG_LEGACY_MSG_TO_KVS +#if defined( VG_MSG_TO_KVS ) #include "vg_kv.h" -void vg_kvs_append_from_legacy_msg2( vg_kvs *kvs, u32 root, void *buffer, u32 len, vg_stack_allocator *stack ) +bool vg_kvs_append_from_legacy_msg2( vg_kvs *kvs, u32 root, void *buffer, u32 len, vg_stack_allocator *stack ) { vg_msg b; vg_msg_init( &b, buffer, len ); @@ -574,9 +590,15 @@ void vg_kvs_append_from_legacy_msg2( vg_kvs *kvs, u32 root, void *buffer, u32 le if( i+1!=count ) vg_strcatch( &format_str, ' ' ); } + + if( !vg_strgood( &value_str ) ) + return 0; + vg_kv_append( kvs, frame_stack[frame_depth], cmd.key, formatted ); } } } + + return 1; } #endif -- 2.25.1