test_dtsod() improved and memory leaks fixed
This commit is contained in:
parent
8819853e15
commit
3c1d92d79a
@ -37,6 +37,7 @@ void StringBuilder_append_int64(StringBuilder* b, int64 a){
|
||||
}
|
||||
string rev=string_reverse((string){buf,i});
|
||||
StringBuilder_append_string(b,rev);
|
||||
free(rev.ptr);
|
||||
}
|
||||
|
||||
void StringBuilder_append_uint64(StringBuilder* b, uint64 a){
|
||||
@ -51,6 +52,7 @@ void StringBuilder_append_uint64(StringBuilder* b, uint64 a){
|
||||
}
|
||||
string rev=string_reverse((string){buf,i});
|
||||
StringBuilder_append_string(b,rev);
|
||||
free(rev.ptr);
|
||||
}
|
||||
|
||||
void StringBuilder_append_double(StringBuilder* b, double a){
|
||||
|
||||
@ -86,7 +86,11 @@ Hashtable* __deserialize(char** _text, bool calledRecursively){
|
||||
Autoarr_remove(b);
|
||||
StringBuilder_append_char(b,c);
|
||||
}
|
||||
else return StringBuilder_build(b);
|
||||
else {
|
||||
char* str=StringBuilder_build(b);
|
||||
Autoarr_clear(b);
|
||||
return str;
|
||||
}
|
||||
}
|
||||
else {
|
||||
prevIsBackslash= c=='\\' && !prevIsBackslash;
|
||||
|
||||
@ -84,5 +84,7 @@ void __serialize(StringBuilder* b, uint8 tabs, Hashtable* dtsod){
|
||||
char* DtsodV24_serialize(Hashtable* dtsod){
|
||||
StringBuilder b=StringBuilder_create(STRB_BC,STRB_BL);
|
||||
__serialize(&b,0,dtsod);
|
||||
return StringBuilder_build(&b);
|
||||
char* str=StringBuilder_build(&b);
|
||||
Autoarr_clear((&b));
|
||||
return str;
|
||||
}
|
||||
|
||||
@ -70,7 +70,7 @@ Unitype* Hashtable_getptr(Hashtable* ht, char* key){
|
||||
uint32 arlen=Autoarr_length(ar);
|
||||
for(uint32 i=0;i<arlen;i++){
|
||||
KeyValuePair* p=Autoarr_getptr(ar,i);
|
||||
if(charbuf_compare(key,p->key)) return &p->value;
|
||||
if(cptr_compare(key,p->key)) return &p->value;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
@ -80,7 +80,7 @@ Unitype Hashtable_get(Hashtable* ht, char* key){
|
||||
uint32 arlen=Autoarr_length(ar);
|
||||
for(uint32 i=0;i<arlen;i++){
|
||||
KeyValuePair p=Autoarr_get(ar,i);
|
||||
if(charbuf_compare(key,p.key)) return p.value;
|
||||
if(cptr_compare(key,p.key)) return p.value;
|
||||
}
|
||||
return UniNull;
|
||||
}
|
||||
|
||||
@ -16,7 +16,7 @@ void Hashtable_free(Hashtable* ht);
|
||||
uint32 Hashtable_height(Hashtable* ht);
|
||||
|
||||
//adds charptr and value to new KeyValuePair
|
||||
//use charbuf_copy() to create new string if needed
|
||||
//use cptr_copy() to create new string if needed
|
||||
#define KVPair(key,value) (KeyValuePair){key,value}
|
||||
|
||||
|
||||
|
||||
@ -1,15 +1,15 @@
|
||||
#include "base.h"
|
||||
|
||||
//returns length of string (including \0)
|
||||
uint32 mystrlen(char* str){
|
||||
uint32 cptr_length(char* str){
|
||||
uint32 len=0;
|
||||
while(*(str++)) len++;
|
||||
return ++len;
|
||||
}
|
||||
|
||||
//allocates new char[] and copies src there
|
||||
char* charbuf_copy(char* src){
|
||||
uint32 len=mystrlen(src);
|
||||
char* cptr_copy(char* src){
|
||||
uint32 len=cptr_length(src);
|
||||
char* dst=malloc(len*sizeof(char));
|
||||
while(len-->0)
|
||||
dst[len]=src[len];
|
||||
@ -17,7 +17,7 @@ char* charbuf_copy(char* src){
|
||||
}
|
||||
|
||||
//compares two char buffers, NullPtr-friendly
|
||||
bool charbuf_compare(char* key0, char* key1){
|
||||
bool cptr_compare(char* key0, char* key1){
|
||||
if(!key0) return key1 ? false : true;
|
||||
if(!key1) return false;
|
||||
while(*key0&&*key1)
|
||||
@ -49,7 +49,7 @@ char* string_cpToCharPtr(string str){
|
||||
string string_cpFromCharPtr(char* cptr){
|
||||
if(!cptr) return stringNull;
|
||||
string str;
|
||||
str.length=mystrlen(cptr)-1;
|
||||
str.length=cptr_length(cptr)-1;
|
||||
str.ptr=malloc(str.length);
|
||||
for(uint32 i=0;i<str.length;i++)
|
||||
str.ptr[i]=cptr[i];
|
||||
|
||||
@ -3,13 +3,13 @@
|
||||
#include "types.h"
|
||||
|
||||
//returns length of string (including \0)
|
||||
uint32 mystrlen(char* str);
|
||||
uint32 cptr_length(char* str);
|
||||
|
||||
//allocates new char[] and copies src there
|
||||
char* charbuf_copy(char* src);
|
||||
char* cptr_copy(char* src);
|
||||
|
||||
//compares two char buffers, NullPtr-friendly
|
||||
bool charbuf_compare(char* key0, char* key1);
|
||||
bool cptr_compare(char* key0, char* key1);
|
||||
|
||||
//multiplies char n times
|
||||
char* char_multiply(char c, uint32 n);
|
||||
|
||||
@ -11,30 +11,45 @@ const char text[]=
|
||||
" text: \"_$\\\"\\\\'''a ыыы000;2;=:%d;```\";\n"
|
||||
"}; ";
|
||||
|
||||
void test_dtsod(){
|
||||
printf("\e[96m-------------[test_dtsod]-------------\n");
|
||||
optime(__func__,200,({
|
||||
Hashtable* dtsod;
|
||||
optime("deserialize",1,(dtsod=DtsodV24_deserialize(text)));
|
||||
Hashtable_foreach(dtsod, p,({
|
||||
printkvp(p);
|
||||
if(p.value.type==HashtablePtr){
|
||||
printf(":\n{\n");
|
||||
Hashtable* sub=p.value.VoidPtr;
|
||||
Hashtable_foreach(sub, _p,({
|
||||
printf(" ");
|
||||
printkvp(_p);
|
||||
printf("\n");
|
||||
}));
|
||||
printf("}");
|
||||
}
|
||||
printf("\n");
|
||||
void print_dtsod(Hashtable* dtsod){
|
||||
printf("\e[92m");
|
||||
Hashtable_foreach(dtsod, p,({
|
||||
printkvp(p);
|
||||
if(p.value.type==HashtablePtr){
|
||||
printf(": {\n");
|
||||
Hashtable* sub=p.value.VoidPtr;
|
||||
Hashtable_foreach(sub, _p,({
|
||||
printf(" ");
|
||||
printkvp(_p);
|
||||
printf("\n");
|
||||
}));
|
||||
printf("}");
|
||||
}
|
||||
printf("\n");
|
||||
}));
|
||||
}
|
||||
|
||||
char* s=DtsodV24_serialize(dtsod);
|
||||
printf("\e[93m\n%s",s);
|
||||
void test_dtsod(){
|
||||
optime(__func__,1,({
|
||||
printf("\e[96m-------------[test_dtsod]-------------\n");
|
||||
Hashtable* dtsod;
|
||||
char* s=cptr_copy(text);
|
||||
|
||||
optime("deserialize",1,(dtsod=DtsodV24_deserialize(s)));
|
||||
free(s);
|
||||
print_dtsod(dtsod);
|
||||
|
||||
optime("serialize",1,(s=DtsodV24_serialize(dtsod)));
|
||||
Hashtable_free(dtsod);
|
||||
printf("\e[92m%s",s);
|
||||
|
||||
optime("reserialize",10,({
|
||||
dtsod=DtsodV24_deserialize(s);
|
||||
free(s);
|
||||
s=DtsodV24_serialize(dtsod);
|
||||
Hashtable_free(dtsod);
|
||||
}));
|
||||
|
||||
free(s);
|
||||
}));
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user