diff --git a/array.c b/array.c index 687d04c..737db67 100644 --- a/array.c +++ b/array.c @@ -29,7 +29,20 @@ void array_clear(array_t* array) array->align = 0; } +static uint array_align(array_t* array, uint count) +{ + return (count / array->align + !!(count % array->align)) * array->align; +} + void array_push(array_t* array, const void* data) { - + if (!(array->count % array->align)) + array_alloc(array, array->count + 1); + else array->count++; + cu_memcpy(array_last(array), data, array->size); } + +void array_pop(array_t* array, void* src) +{ + +} \ No newline at end of file diff --git a/array.h b/array.h index 32b0742..41d8800 100644 --- a/array.h +++ b/array.h @@ -14,6 +14,11 @@ void array_init(array_t* array, uint size, uint align); void array_alloc(array_t* array, uint newCount); void array_clear(array_t* array); +#define array_at(array, i) ((uint8_t*)(array)->mem + (i)*(array)->size) +#define array_first(array) array_at(array, 0) +#define array_last(array) array_at(array, (array)->count - 1) + void array_push(array_t* array, const void* data); +void array_pop(array_t* array, void* src); #endif \ No newline at end of file diff --git a/cutil.c b/cutil.c index eaf8578..5fc7e0d 100644 --- a/cutil.c +++ b/cutil.c @@ -1,5 +1,9 @@ #include "cutil.h" +#include void* (*cu_malloc)(size_t) = CUTIL_MALLOC; void* (*cu_realloc)(void*, size_t) = CUTIL_REALLOC; void* (*cu_free)(void*) = CUTIL_FREE; +void* (*cu_memset)(void*,int,size_t) = CUTIL_MEMSET; +void* (*cu_memcpy)(void*,const void*,size_t) = CUTIL_MEMCPY; +void* (*cu_memmove)(void*,const void*,size_t) = CUTIL_MEMMOVE; diff --git a/cutil.h b/cutil.h index 73df12e..1715391 100644 --- a/cutil.h +++ b/cutil.h @@ -7,9 +7,15 @@ #define CUTIL_MALLOC malloc #define CUTIL_REALLOC realloc #define CUTIL_FREE free +#define CUTIL_MEMSET memset +#define CUTIL_MEMCPY memcpy +#define CUTIL_MEMMOVE memmove extern void* (*cu_malloc)(size_t); extern void* (*cu_realloc)(void*, size_t); -extern void* (*cu_free)(void*); +extern void (*cu_free)(void*); +extern void* (*cu_memset)(void*,int,size_t); +extern void* (*cu_memcpy)(void*,const void*,size_t); +extern void* (*cu_memmove)(void*,const void*,size_t); #endif \ No newline at end of file diff --git a/list.c b/list.c index 6076cb9..1455e07 100644 --- a/list.c +++ b/list.c @@ -29,10 +29,10 @@ void list_add(list_t* list, uint size, void* data) { uint nodeSize = LIST_NODE_SIZE + size; list_node_t* node = (list_node_t*)cu_malloc(nodeSize); - memset(node, '\0', nodeSize); + cu_memset(node, '\0', nodeSize); if (data) { - memcpy((uint8_t*)node + LIST_NODE_SIZE, data, size); + cu_memcpy((uint8_t*)node + LIST_NODE_SIZE, data, size); } list_node_t* last = list->last;