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