diff --git a/containers/named_array.c b/containers/named_array.c index c028e96..bbfd66f 100644 --- a/containers/named_array.c +++ b/containers/named_array.c @@ -12,6 +12,8 @@ #include "named_array.h" +#define assert__(x) for ( ; !(x) ; assert(x) ) + void named_array_init(NamedArray* array, unsigned int element_size, unsigned int max_elements) { array->element_size = element_size; array->max_element_count = max_elements; @@ -28,6 +30,7 @@ void named_array_init(NamedArray* array, unsigned int element_size, unsigned int array->used_markers = (unsigned char*) malloc(array->marker_count); #endif memset(array->used_markers, 0, sizeof(unsigned char) * array->marker_count); + memset(array->elements, 0, element_size * max_elements); } char named_array_used(NamedArray* array, unsigned int id) { @@ -56,6 +59,17 @@ void* named_array_alloc(NamedArray* array, unsigned int* new_id) { return NULL; } +#define BYTE_TO_BINARY_PATTERN "%c%c%c%c%c%c%c%c" +#define BYTE_TO_BINARY(byte) \ + (byte & 0x80 ? '1' : '0'), \ + (byte & 0x40 ? '1' : '0'), \ + (byte & 0x20 ? '1' : '0'), \ + (byte & 0x10 ? '1' : '0'), \ + (byte & 0x08 ? '1' : '0'), \ + (byte & 0x04 ? '1' : '0'), \ + (byte & 0x02 ? '1' : '0'), \ + (byte & 0x01 ? '1' : '0') + void* named_array_reserve(NamedArray* array, unsigned int id) { if(!named_array_used(array, id)) { unsigned int j = (id % 8); @@ -63,6 +77,11 @@ void* named_array_reserve(NamedArray* array, unsigned int id) { assert(!named_array_used(array, id)); array->used_markers[i] |= (unsigned char) 1 << j; + + assert__(named_array_used(array, id)) { + printf("%s: id %d is not used in [%d,%d] = "BYTE_TO_BINARY_PATTERN"\n",__func__,id,i,j, BYTE_TO_BINARY(array->used_markers[i])); + } + assert(named_array_used(array, id)); unsigned char* ptr = &array->elements[id * array->element_size];