summaryrefslogtreecommitdiff
path: root/src/util/config/serializers.cpp
diff options
context:
space:
mode:
authorday <day@national.shitposting.agency>2026-03-16 16:25:49 +0100
committerday <day@national.shitposting.agency>2026-03-16 16:25:49 +0100
commit7f85c9fc75bd62ac09ea4457d3b17f85988fca66 (patch)
tree15248e42bfafc6bd19e50c9010b701057958ff3a /src/util/config/serializers.cpp
parent872c39b24ecf4063f785ff3e8b2f940acd8c2d59 (diff)
parent991352b0d2767e6bd1a46f554db4ac9d208c13ad (diff)
Merge remote-tracking branch 'origin/master' into obj
Diffstat (limited to 'src/util/config/serializers.cpp')
-rw-r--r--src/util/config/serializers.cpp115
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;
}