array 2
This commit is contained in:
parent
688a343a92
commit
6089de7e4b
4 changed files with 22 additions and 16 deletions
25
array.c
25
array.c
|
|
@ -1,26 +1,33 @@
|
|||
#include "array.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
|
||||
? (reserve / align + !!(reserve % align)) * align
|
||||
: align;
|
||||
array_t* array = (array_t*)cu_malloc(CU_ARRAY_HEAD_SIZE + capacity*size);
|
||||
if (!array) return NULL;
|
||||
|
||||
array->size = size;
|
||||
array->count = 0;
|
||||
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;
|
||||
}
|
||||
|
|
|
|||
9
array.h
9
array.h
|
|
@ -4,16 +4,15 @@
|
|||
#include "cutypes.h"
|
||||
|
||||
typedef struct {
|
||||
void* mem;
|
||||
uint size;
|
||||
uint count;
|
||||
uint align;
|
||||
uint8_t data[1];
|
||||
} array_t;
|
||||
|
||||
#define CU_ARRAY_HEAD_SIZE (sizeof(uint) * 3)
|
||||
|
||||
array_t* array_create(uint size, uint align, uint reserve);
|
||||
void array_delete(array_t* array);
|
||||
void array_init(array_t* array, uint size, uint align, uint reserve);
|
||||
void array_alloc(array_t* array, uint newCount);
|
||||
void array_clear(array_t* array);
|
||||
|
||||
void* array_push(array_t* array, const void* data);
|
||||
|
||||
|
|
|
|||
2
cutil.c
2
cutil.c
|
|
@ -1,5 +1,5 @@
|
|||
#include "cutil.h"
|
||||
|
||||
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;
|
||||
|
|
|
|||
2
cutil.h
2
cutil.h
|
|
@ -9,7 +9,7 @@
|
|||
#define CUTIL_FREE free
|
||||
|
||||
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*);
|
||||
|
||||
#endif
|
||||
Loading…
Add table
Reference in a new issue