From eb55ce2b75d549733a7e5b50db9ef64345802434 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9E=D0=BB=D0=B5=D0=B3=20=D0=91=D0=BE=D1=80=D0=BE=D0=B4?= =?UTF-8?q?=D0=B8=D0=BD?= Date: Tue, 5 Sep 2023 12:15:20 +0200 Subject: [PATCH] at work --- clib/Makefile.am | 2 +- clib/Makefile.in | 2 +- clib/cdynarr.c | 51 ++++++++++++++++++++++++++++++++++++++++++--- clib/cdynarr_test.c | 7 ++++--- clib/jblock.c | 10 ++++----- clib/jblock.h | 6 +++--- 6 files changed, 62 insertions(+), 16 deletions(-) diff --git a/clib/Makefile.am b/clib/Makefile.am index 9c6277a..f13af6c 100644 --- a/clib/Makefile.am +++ b/clib/Makefile.am @@ -57,7 +57,7 @@ valgrind: $(bin_TESTS) done bin_TESTS = \ - cstring_test + cdynarr_test noinst_PROGRAMS = \ cfparser_test \ diff --git a/clib/Makefile.in b/clib/Makefile.in index e220911..f9d684d 100644 --- a/clib/Makefile.in +++ b/clib/Makefile.in @@ -425,7 +425,7 @@ include_HEADERS = \ @HAVE_VALGRIND_TRUE@VALGRIND_OPT = --tool=memcheck -s bin_TESTS = \ - cstring_test + cdynarr_test #TESTS = $(bin_TESTS) diff --git a/clib/cdynarr.c b/clib/cdynarr.c index e16cbb1..36b54e5 100644 --- a/clib/cdynarr.c +++ b/clib/cdynarr.c @@ -36,8 +36,9 @@ void* cintarr_init(cintarr_t* array) { void* cintarr_append(cintarr_t* array, int64_t add) { if (array->size + 1 > array->capa) { - size_t newcapa = (array->capa * 10) / 6 ; - int64_t* newarray = realloc(array->data, newcapa); + size_t newcapa = (array->capa * 10) / 6; + size_t memsize = newcapa * sizeof(int64_t); + int64_t* newarray = realloc(array->data, memsize); if (newarray == NULL) return NULL; array->capa = newcapa; array->data = newarray; @@ -56,8 +57,9 @@ void cintarr_destroy(cintarr_t* array) { } void cintarr_free(cintarr_t* array) { + if (array == NULL) return; cintarr_destroy(array); - free(array->data); + free(array); } @@ -91,3 +93,46 @@ void cfltarr_destroy(cfltarr_t* array) { if (array == NULL) return; free(array->data); } + + +/* Bool array */ +cboolarr_t* new_cboolarr(void) { + cboolarr_t* arr = malloc(sizeof(cboolarr_t)); + if (arr == NULL) return NULL; + if (cboolarr_init(arr) == NULL) { + cboolarr_free(arr); + return NULL; + } + return arr; +} + +void* cboolarr_init(cboolarr_t* array) { + array->data = malloc(INIT_CAPA * sizeof(bool)); + if (array->data == NULL) return NULL; + memset(array->data, 0, INIT_CAPA); + array->capa = INIT_CAPA; + array->size = 0; + return array->data; +} + +void* cboolarr_append(cboolarr_t* array, bool add) { + if (array->size + 1 > array->capa) { + size_t newcapa = (array->capa * 10) / 6 ; + bool* newarray = realloc(array->data, newcapa); + if (newarray == NULL) return NULL; + array->capa = newcapa; + array->data = newarray; + } + array->data[array->size++] = add; + return array->data; +} + +void cboolarr_destroy(cboolarr_t* array) { + if (array == NULL) return; + free(array->data); +} + +void cboolarr_free(cboolarr_t* array) { + cboolarr_destroy(array); + free(array->data); +} diff --git a/clib/cdynarr_test.c b/clib/cdynarr_test.c index cbebec3..cc7e8cd 100644 --- a/clib/cdynarr_test.c +++ b/clib/cdynarr_test.c @@ -12,9 +12,10 @@ void test01(void) { - - - + cintarr_t* arr = new_cintarr(); + cintarr_append(arr, 12); + cintarr_append(arr, 12); + cintarr_free(arr); } int main(void) { diff --git a/clib/jblock.c b/clib/jblock.c index 33cb6a4..326ba00 100644 --- a/clib/jblock.c +++ b/clib/jblock.c @@ -103,9 +103,9 @@ int jblock_addstr(jblock_t* jb, char* key, char* val) { if (jblock_checkalloc(jb) == NULL) { return -1; } + jb->kvarr[jb->kvsize].type = JKVTYPE_STR; jb->kvarr[jb->kvsize].key = strcopy(key); jb->kvarr[jb->kvsize].str = strcopy(val); - jb->kvarr[jb->kvsize].type = JKVTYPE_STR; return ++jb->kvsize; } @@ -174,7 +174,7 @@ void jblock_destroy(jblock_t* jb) { for (int i = 0; i < jb->kvsize; i++) { switch (jb->kvarr[i].type) { case JKVTYPE_BLK: { - jblock_destroy(jb->kvarr[i].blk); + //jblock_destroy(jb->kvarr[i].blk); break; } //case JKVTYPE_BLKARR: { @@ -185,15 +185,15 @@ void jblock_destroy(jblock_t* jb) { break; } case JKVTYPE_INTARR: { - //free(jb->kvarr[i].numarr); + cintarr_destroy(&(jb->kvarr[i].numarr)); break; } case JKVTYPE_BOOLARR: { - //free(jb->kvarr[i].flagarr); + cboolarr_destroy(&(jb->kvarr[i].flagarr)); break; } case JKVTYPE_FLTARR: { - //free(jb->kvarr[i].fltarr); + cfltarr_destroy(&(jb->kvarr[i].fltarr)); break; } } diff --git a/clib/jblock.h b/clib/jblock.h index a45785b..0415e86 100644 --- a/clib/jblock.h +++ b/clib/jblock.h @@ -21,9 +21,9 @@ typedef struct { cintarr_t numarr; cfltarr_t fltarr; cboolarr_t flagarr; - jblock_t* blk; - jblock_t* blkarr; - char** strarr; + //jblock_t* blk; + //jblock_t* blkarr; + //char** strarr; }; int arrsize;