StringBuilder rewrote

This commit is contained in:
2022-04-20 19:25:19 +03:00
parent 2434a126da
commit 0309f0a3d0
9 changed files with 138 additions and 76 deletions

View File

@@ -3,8 +3,6 @@
#define ARR_BC 64
#define ARR_BL 1024
#define STRB_BC 64
#define STRB_BL 1024
typedef struct DeserializeSharedData{
@@ -105,7 +103,7 @@ Maybe __ReadName(DeserializeSharedData* shared){
safethrow_wrongchar(c,;);
return SUCCESS(UniPtr(CharPtr,NULL));
case ':':
return SUCCESS(UniPtr(CharPtr,string_cpToCptr(nameStr)));
return SUCCESS(UniPtr(CharPtr,string_extract(nameStr)));
case '$':
if(nameStr.length!=0)
safethrow_wrongchar(c,;);
@@ -130,19 +128,18 @@ Maybe __ReadValue(DeserializeSharedData* shared);
Maybe __ReadString(DeserializeSharedData* shared){
char c;
bool prevIsBackslash=false;
StringBuilder* b=StringBuilder_create(STRB_BC,STRB_BL);
StringBuilder* b=StringBuilder_create();
while ((c=*++text)){
if(c=='"') {
if(prevIsBackslash) {
// replacing <\"> with <">
StringBuilder_pop(b);
StringBuilder_rmchar(b);
StringBuilder_append_char(b,c);
prevIsBackslash=false;
}
else {
char* str=StringBuilder_build(b);
StringBuilder_free(b);
char* str=StringBuilder_build(b).ptr;
return SUCCESS(UniPtr(CharPtr,str));
}
}
@@ -188,7 +185,7 @@ Maybe __ParseValue(DeserializeSharedData* shared, string str){
break;
// Float64
case 'f': {
char* _c=string_cpToCptr(str);
char* _c=string_extract(str);
Unitype rez=Uni(Float64,strtod(_c,NULL));
free(_c);
return SUCCESS(rez);
@@ -196,7 +193,7 @@ Maybe __ParseValue(DeserializeSharedData* shared, string str){
// UInt64
case 'u': {
uint64 lu=0;
char* _c=string_cpToCptr(str);
char* _c=string_extract(str);
if(sscanf(_c,"%lu",&lu)!=1){
char err[64];
IFWIN(
@@ -212,7 +209,7 @@ Maybe __ParseValue(DeserializeSharedData* shared, string str){
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9': {
int64 li=0;
char* _c=string_cpToCptr(str);
char* _c=string_extract(str);
if(sscanf(_c,"%li",&li)!=1){
char err[64];
IFWIN(

View File

@@ -1,9 +1,6 @@
#include "DtsodV24.h"
#include "../String/StringBuilder.h"
// 65536 max length!
#define STRB_BC 64
#define STRB_BL 1024
typedef struct SerializeSharedData{
StringBuilder* sh_builder;
@@ -35,7 +32,7 @@ Maybe __AppendValue(SerializeSharedData* shared, Unitype u){
addc('u');
break;
case Float64:
StringBuilder_append_double(b,u.Float64);
StringBuilder_append_float64(b,u.Float64);
addc('f');
break;
case CharPtr:
@@ -64,7 +61,7 @@ Maybe __AppendValue(SerializeSharedData* shared, Unitype u){
try(AppendValue(e),__,;);
addc(',');
}));
StringBuilder_pop(b);
StringBuilder_rmchar(b);
addc('\n');
tabs--;
AppendTabs();
@@ -106,9 +103,8 @@ Maybe __serialize(StringBuilder* _b, uint8 _tabs, Hashtable* dtsod){
}
Maybe DtsodV24_serialize(Hashtable* dtsod){
StringBuilder* sb=StringBuilder_create(STRB_BC,STRB_BL);
try(__serialize(sb,0,dtsod),__, StringBuilder_free((sb)));
char* str=StringBuilder_build(sb);
StringBuilder_free((sb));
StringBuilder* sb=StringBuilder_create();
try(__serialize(sb,0,dtsod),__, StringBuilder_free(sb));
char* str=StringBuilder_build(sb).ptr;
return SUCCESS(UniPtr(CharPtr, str));
}