diff options
| author | day <day@national.shitposting.agency> | 2026-03-16 16:25:49 +0100 |
|---|---|---|
| committer | day <day@national.shitposting.agency> | 2026-03-16 16:25:49 +0100 |
| commit | 7f85c9fc75bd62ac09ea4457d3b17f85988fca66 (patch) | |
| tree | 15248e42bfafc6bd19e50c9010b701057958ff3a /src/util/config/serializers.cpp | |
| parent | 872c39b24ecf4063f785ff3e8b2f940acd8c2d59 (diff) | |
| parent | 991352b0d2767e6bd1a46f554db4ac9d208c13ad (diff) | |
Merge remote-tracking branch 'origin/master' into obj
Diffstat (limited to 'src/util/config/serializers.cpp')
| -rw-r--r-- | src/util/config/serializers.cpp | 115 |
1 files changed, 64 insertions, 51 deletions
diff --git a/src/util/config/serializers.cpp b/src/util/config/serializers.cpp index 01f416c..15ddae0 100644 --- a/src/util/config/serializers.cpp +++ b/src/util/config/serializers.cpp @@ -1,109 +1,122 @@ -#include <cstdarg> -#include <cstdio> - #include "../config.h" -void serialize_node( CFG_SERIALIZER* s, CFG_NODE* n, char* buf ) { - U32 len = strlen( buf ); - for( U32 i = 0; i < s->tabc * 2; ++i ) buf[i + len] = ' '; - buf[len + s->tabc * 2] = 0; - sprintf( buf, "%s%s %s", buf, cfg_types[n->type].def, n->name ); +STR serialize_node( CFG_SERIALIZER* s, CFG_NODE* n ) { + STR ret{}; + for( U32 i = 0; i < s->tabc * 2; ++i ) ret.append( " " ); + ret.fmt( "%s %s", cfg_types[n->type].def, n->name.data ); + + return ret; } -void cfg_serialize_section( CFG_SERIALIZER* s, CFG_NODE *n, char *buf ) { +STR cfg_serialize_section( CFG_SERIALIZER* s, CFG_NODE *n ) { CFG_SECTION* sec = (CFG_SECTION*)n; + STR buf; if( sec->parent ) { - serialize_node( s, n, buf ); - strcat( buf, " {\n" ); + buf += serialize_node( s, n ); + buf += " {\n"; s->tabc++; } - char line[8192]; for( U32 i = 0; i < sec->children.size; ++i ) { - line[0] = 0; CFG_NODE* c = sec->children[i]; if( c->type == CFGT_SECTION ) { - cfg_serialize_section( s, c, buf ); + buf += cfg_serialize_section( s, c ); continue; } - cfg_types[c->type].serializer( s, c, line ); - strcat( buf, line ); - strcat( buf, "\n" ); + buf += cfg_types[c->type].serializer( s, c ); + buf += "\n"; } if( sec->parent ) { s->tabc--; - char tabbuf[512] = { 0 }; - for( U32 i = 0 ; i < s->tabc * 2; ++i ) - tabbuf[i] = ' '; - tabbuf[s->tabc * 2] = 0; - strcat( buf, tabbuf ); - strcat( buf, "}" ); + for( U32 i = 0 ; i < s->tabc * 2; ++i ) buf += ' '; + buf += "}"; if( sec->parent ) - strcat( buf, "\n" ); + buf += "\n"; } + + return buf; } -void cfg_serialize_bytes( CFG_SERIALIZER* s, CFG_NODE* n, char* buf ) { +STR cfg_serialize_bytes( CFG_SERIALIZER* s, CFG_NODE* n ) { CFG_BYTES* b = (CFG_BYTES*)n; U32 size = b->size; U8* bytes = b->bytes; - serialize_node( s, n, buf ); - sprintf( buf, "%s[%d] = \"", buf, size ); - U32 len = strlen( buf ); + STR buf{}; + + buf += serialize_node( s, n ); + buf.fmt( "[%d] = \"", size ); for( U32 i = 0; i < size; ++i ) { - sprintf( buf + len + i * 2, "%02X", bytes[i] ); + buf.fmt( "%02X", bytes[i] ); } - - sprintf( buf, "%s%s", buf, "\";" ); + buf += "\";"; + return buf; } -void cfg_serialize_str( CFG_SERIALIZER* s, CFG_NODE* n, char *buf ) { +STR cfg_serialize_str( CFG_SERIALIZER* s, CFG_NODE* n ) { CFG_STR* sn = (CFG_STR*)n; char* str = sn->str; - serialize_node( s, n, buf ); - sprintf( buf, "%s[%d] = \"%s\";", buf, sn->len, str ); + STR buf{}; + + buf += serialize_node( s, n ); + buf.fmt( "[%d] = \"%s\";", sn->len, str ); + return buf; } -void cfg_serialize_int( CFG_SERIALIZER* s, CFG_NODE* n, char *buf ) { - CFG_INT* i = (CFG_INT*)n; - I32 ival = i->value; +STR cfg_serialize_int( CFG_SERIALIZER* s, CFG_NODE* n ) { + CFG_INT* i = (CFG_INT*)n; + I32 ival = i->value; - serialize_node( s, n, buf ); - sprintf( buf, "%s = %d;", buf, ival ); + STR buf{}; + + buf += serialize_node( s, n ); + buf.fmt( " = %d;", ival ); + return buf; } -void cfg_serialize_float( CFG_SERIALIZER* s, CFG_NODE* n, char *buf ) { +STR cfg_serialize_float( CFG_SERIALIZER* s, CFG_NODE* n ) { CFG_FLOAT* f = (CFG_FLOAT*)n; F32 fval = f->value; - serialize_node( s, n, buf ); - sprintf( buf, "%s = %g;", buf, fval ); + STR buf{}; + + buf += serialize_node( s, n ); + buf.fmt( " = %g;", fval ); + return buf; } -void cfg_serialize_vec2( CFG_SERIALIZER* s, CFG_NODE* n, char *buf ) { +STR cfg_serialize_vec2( CFG_SERIALIZER* s, CFG_NODE* n ) { CFG_VEC2* v = (CFG_VEC2*)n; VEC2 val = v->value; - serialize_node( s, n, buf ); - sprintf( buf, "%s = { %g, %g };", buf, val.x, val.y ); + STR buf{}; + + buf += serialize_node( s, n ); + buf.fmt( " = { %g, %g };", val.x, val.y ); + return buf; } -void cfg_serialize_vec3( CFG_SERIALIZER* s, CFG_NODE* n, char *buf ) { +STR cfg_serialize_vec3( CFG_SERIALIZER* s, CFG_NODE* n ) { CFG_VEC3* v = (CFG_VEC3*)n; VEC3 val = v->value; - serialize_node( s, n, buf ); - sprintf( buf, "%s = { %g, %g, %g };", buf, val.x, val.y, val.z ); + STR buf{}; + + buf += serialize_node( s, n ); + buf.fmt( " = { %g, %g, %g };", val.x, val.y, val.z ); + return buf; } -void cfg_serialize_clr( CFG_SERIALIZER* s, CFG_NODE* n, char *buf ) { +STR cfg_serialize_clr( CFG_SERIALIZER* s, CFG_NODE* n ) { CFG_CLR* v = (CFG_CLR*)n; CLR val = v->value; - serialize_node( s, n, buf ); - sprintf( buf, "%s = { %g, %g, %g, %g };", buf, val.r, val.g, val.b, val.a ); + STR buf{}; + + buf += serialize_node( s, n ); + buf.fmt( " = { %g, %g, %g, %g };", val.r, val.g, val.b, val.a ); + return buf; } |
