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 "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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
9
array.h
9
array.h
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
||||||
2
cutil.c
2
cutil.c
|
|
@ -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;
|
||||||
|
|
|
||||||
2
cutil.h
2
cutil.h
|
|
@ -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
|
||||||
Loading…
Add table
Reference in a new issue