fix: minor memory cleanup

This commit is contained in:
Hayden K 2019-04-07 19:34:08 -04:00
parent 9aee9fe970
commit d3cb7d1b21

View File

@ -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];