1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
#include "../config.h"
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;
}
STR cfg_serialize_section( CFG_SERIALIZER* s, CFG_NODE *n ) {
CFG_SECTION* sec = (CFG_SECTION*)n;
STR buf;
if( sec->parent ) {
buf += serialize_node( s, n );
buf += " {\n";
s->tabc++;
}
for( U32 i = 0; i < sec->children.size; ++i ) {
CFG_NODE* c = sec->children[i];
if( c->type == CFGT_SECTION ) {
buf += cfg_serialize_section( s, c );
continue;
}
buf += cfg_types[c->type].serializer( s, c );
buf += "\n";
}
if( sec->parent ) {
s->tabc--;
for( U32 i = 0 ; i < s->tabc * 2; ++i ) buf += ' ';
buf += "}";
if( sec->parent )
buf += "\n";
}
return 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;
STR buf{};
buf += serialize_node( s, n );
buf.fmt( "[%d] = \"", size );
for( U32 i = 0; i < size; ++i ) {
buf.fmt( "%02X", bytes[i] );
}
buf += "\";";
return buf;
}
STR cfg_serialize_str( CFG_SERIALIZER* s, CFG_NODE* n ) {
CFG_STR* sn = (CFG_STR*)n;
char* str = sn->str;
STR buf{};
buf += serialize_node( s, n );
buf.fmt( "[%d] = \"%s\";", sn->len, str );
return buf;
}
STR cfg_serialize_int( CFG_SERIALIZER* s, CFG_NODE* n ) {
CFG_INT* i = (CFG_INT*)n;
I32 ival = i->value;
STR buf{};
buf += serialize_node( s, n );
buf.fmt( " = %d;", ival );
return buf;
}
STR cfg_serialize_float( CFG_SERIALIZER* s, CFG_NODE* n ) {
CFG_FLOAT* f = (CFG_FLOAT*)n;
F32 fval = f->value;
STR buf{};
buf += serialize_node( s, n );
buf.fmt( " = %g;", fval );
return buf;
}
STR cfg_serialize_vec2( CFG_SERIALIZER* s, CFG_NODE* n ) {
CFG_VEC2* v = (CFG_VEC2*)n;
VEC2 val = v->value;
STR buf{};
buf += serialize_node( s, n );
buf.fmt( " = { %g, %g };", val.x, val.y );
return buf;
}
STR cfg_serialize_vec3( CFG_SERIALIZER* s, CFG_NODE* n ) {
CFG_VEC3* v = (CFG_VEC3*)n;
VEC3 val = v->value;
STR buf{};
buf += serialize_node( s, n );
buf.fmt( " = { %g, %g, %g };", val.x, val.y, val.z );
return buf;
}
STR cfg_serialize_clr( CFG_SERIALIZER* s, CFG_NODE* n ) {
CFG_CLR* v = (CFG_CLR*)n;
CLR val = v->value;
STR buf{};
buf += serialize_node( s, n );
buf.fmt( " = { %g, %g, %g, %g };", val.r, val.g, val.b, val.a );
return buf;
}
|