This commit is contained in:
mykola2312 2022-04-17 20:43:47 +03:00
parent 688a343a92
commit 6089de7e4b
4 changed files with 22 additions and 16 deletions

25
array.c
View file

@ -1,26 +1,33 @@
#include "array.h" #include "array.h"
#include "cutil.h" #include "cutil.h"
array_t* array_create(uint size, uint align, uint reserve) void array_init(array_t* array, uint size, uint align, uint reserve)
{ {
uint capacity = reserve uint capacity = reserve
? (reserve / align + !!(reserve % align)) * align ? (reserve / align + !!(reserve % align)) * align
: align; : align;
array_t* array = (array_t*)cu_malloc(CU_ARRAY_HEAD_SIZE + capacity*size);
if (!array) return NULL;
array->size = size; array->size = size;
array->count = 0; array->count = 0;
array->align = align; array->align = align;
return array; array_alloc(array, capacity);
} }
void array_delete(array_t* array) void array_alloc(array_t* array, uint newCount)
{ {
cu_free(array); size_t size = newCount*array->size;
if (array->count) array->mem = cu_realloc(array->mem, size);
else array->mem = cu_malloc(size);
array->count = array->mem ? newCount : 0;
} }
void* array_push(array_t* array, const void* data) void array_clear(array_t* array)
{ {
if (array->count)
{
cu_free(array->mem);
array->mem = NULL;
array->count = 0;
}
array->size = 0;
array->align = 0;
} }

View file

@ -4,16 +4,15 @@
#include "cutypes.h" #include "cutypes.h"
typedef struct { typedef struct {
void* mem;
uint size; uint size;
uint count; uint count;
uint align; uint align;
uint8_t data[1];
} array_t; } array_t;
#define CU_ARRAY_HEAD_SIZE (sizeof(uint) * 3) void array_init(array_t* array, uint size, uint align, uint reserve);
void array_alloc(array_t* array, uint newCount);
array_t* array_create(uint size, uint align, uint reserve); void array_clear(array_t* array);
void array_delete(array_t* array);
void* array_push(array_t* array, const void* data); void* array_push(array_t* array, const void* data);

View file

@ -1,5 +1,5 @@
#include "cutil.h" #include "cutil.h"
void* (*cu_malloc)(size_t) = CUTIL_MALLOC; void* (*cu_malloc)(size_t) = CUTIL_MALLOC;
void* (*cu_relloac)(void*, size_t) = CUTIL_REALLOC; void* (*cu_realloc)(void*, size_t) = CUTIL_REALLOC;
void* (*cu_free)(void*) = CUTIL_FREE; void* (*cu_free)(void*) = CUTIL_FREE;

View file

@ -9,7 +9,7 @@
#define CUTIL_FREE free #define CUTIL_FREE free
extern void* (*cu_malloc)(size_t); extern void* (*cu_malloc)(size_t);
extern void* (*cu_relloac)(void*, size_t); extern void* (*cu_realloc)(void*, size_t);
extern void* (*cu_free)(void*); extern void* (*cu_free)(void*);
#endif #endif