This commit is contained in:
Олег Бородин
2023-09-05 13:31:26 +02:00
parent eb55ce2b75
commit e954daf809
2 changed files with 36 additions and 7 deletions

View File

@@ -64,6 +64,16 @@ void cintarr_free(cintarr_t* array) {
/* Float array */ /* Float array */
cfltarr_t* new_cfltarr(void) {
cfltarr_t* arr = malloc(sizeof(cfltarr_t));
if (arr == NULL) return NULL;
if (cfltarr_init(arr) == NULL) {
cfltarr_free(arr);
return NULL;
}
return arr;
}
void* cfltarr_init(cfltarr_t* array) { void* cfltarr_init(cfltarr_t* array) {
array->data = malloc(INIT_CAPA * sizeof(double)); array->data = malloc(INIT_CAPA * sizeof(double));
if (array->data == NULL) return NULL; if (array->data == NULL) return NULL;
@@ -75,8 +85,9 @@ void* cfltarr_init(cfltarr_t* array) {
void* cfltarr_append(cfltarr_t* array, double add) { void* cfltarr_append(cfltarr_t* array, double add) {
if (array->size + 1 > array->capa) { if (array->size + 1 > array->capa) {
size_t newcapa = (array->capa * 10) / 6 ; size_t newcapa = (array->capa * 10) / 6;
double* newarray = realloc(array->data, newcapa); size_t memsize = newcapa * sizeof(double);
double* newarray = realloc(array->data, memsize);
if (newarray == NULL) return NULL; if (newarray == NULL) return NULL;
array->capa = newcapa; array->capa = newcapa;
array->data = newarray; array->data = newarray;
@@ -94,6 +105,11 @@ void cfltarr_destroy(cfltarr_t* array) {
free(array->data); free(array->data);
} }
void cfltarr_free(cfltarr_t* array) {
if (array == NULL) return;
cfltarr_destroy(array);
free(array);
}
/* Bool array */ /* Bool array */
cboolarr_t* new_cboolarr(void) { cboolarr_t* new_cboolarr(void) {
@@ -117,8 +133,9 @@ void* cboolarr_init(cboolarr_t* array) {
void* cboolarr_append(cboolarr_t* array, bool add) { void* cboolarr_append(cboolarr_t* array, bool add) {
if (array->size + 1 > array->capa) { if (array->size + 1 > array->capa) {
size_t newcapa = (array->capa * 10) / 6 ; size_t newcapa = (array->capa * 10) / 6;
bool* newarray = realloc(array->data, newcapa); size_t memsize = newcapa * sizeof(bool);
bool* newarray = realloc(array->data, memsize);
if (newarray == NULL) return NULL; if (newarray == NULL) return NULL;
array->capa = newcapa; array->capa = newcapa;
array->data = newarray; array->data = newarray;
@@ -127,12 +144,18 @@ void* cboolarr_append(cboolarr_t* array, bool add) {
return array->data; return array->data;
} }
bool* cboolarr_getref(cboolarr_t* array) {
return array->data;
}
void cboolarr_destroy(cboolarr_t* array) { void cboolarr_destroy(cboolarr_t* array) {
if (array == NULL) return; if (array == NULL) return;
free(array->data); free(array->data);
} }
void cboolarr_free(cboolarr_t* array) { void cboolarr_free(cboolarr_t* array) {
if (array == NULL) return;
cboolarr_destroy(array); cboolarr_destroy(array);
free(array->data); free(array);
} }

View File

@@ -13,8 +13,14 @@
void test01(void) { void test01(void) {
cintarr_t* arr = new_cintarr(); cintarr_t* arr = new_cintarr();
cintarr_append(arr, 12); const size_t size = 1024 * 1024 * 32;
cintarr_append(arr, 12); for (size_t i = 0; i < size; i++) {
cintarr_append(arr, (int64_t)i);
}
for (size_t i = 0; i < size; i++) {
MASSERT(arr->data[i] == i);
}
MASSERT(arr->size == size);
cintarr_free(arr); cintarr_free(arr);
} }