diff --git a/src/data_structures/priority_heap.c b/src/data_structures/priority_heap.c index af7e400..437aea2 100644 --- a/src/data_structures/priority_heap.c +++ b/src/data_structures/priority_heap.c @@ -21,27 +21,27 @@ #include void simple_archiver_priority_heap_internal_realloc( - SDArchiverPHeap **priority_heap) { - SDArchiverPHeap *new_priority_heap = malloc(sizeof(SDArchiverPHeap)); + SDArchiverPHeap *priority_heap) { + SDArchiverPHeap new_priority_heap; - new_priority_heap->capacity = (*priority_heap)->capacity * 2; - new_priority_heap->size = 0; - new_priority_heap->less_fn = (*priority_heap)->less_fn; + new_priority_heap.capacity = priority_heap->capacity * 2; + new_priority_heap.size = 0; + new_priority_heap.less_fn = priority_heap->less_fn; - new_priority_heap->nodes = - calloc(new_priority_heap->capacity, sizeof(SDArchiverPHNode)); + new_priority_heap.nodes = + calloc(new_priority_heap.capacity, sizeof(SDArchiverPHNode)); - for (size_t idx = 1; idx < (*priority_heap)->size + 1; ++idx) { - if ((*priority_heap)->nodes[idx].is_valid != 0) { + for (size_t idx = 1; idx < priority_heap->size + 1; ++idx) { + if (priority_heap->nodes[idx].is_valid != 0) { simple_archiver_priority_heap_insert( - &new_priority_heap, (*priority_heap)->nodes[idx].priority, - (*priority_heap)->nodes[idx].data, - (*priority_heap)->nodes[idx].data_cleanup_fn); - (*priority_heap)->nodes[idx].is_valid = 0; + &new_priority_heap, priority_heap->nodes[idx].priority, + priority_heap->nodes[idx].data, + priority_heap->nodes[idx].data_cleanup_fn); + priority_heap->nodes[idx].is_valid = 0; } } - simple_archiver_priority_heap_free(priority_heap); + free(priority_heap->nodes); *priority_heap = new_priority_heap; } @@ -98,33 +98,32 @@ void simple_archiver_priority_heap_free(SDArchiverPHeap **priority_heap) { } } -void simple_archiver_priority_heap_insert(SDArchiverPHeap **priority_heap, +void simple_archiver_priority_heap_insert(SDArchiverPHeap *priority_heap, long long priority, void *data, void (*data_cleanup_fn)(void *)) { - if (!priority_heap || !*priority_heap) { + if (!priority_heap) { return; } - if ((*priority_heap)->size + 1 >= (*priority_heap)->capacity) { + if (priority_heap->size + 1 >= priority_heap->capacity) { simple_archiver_priority_heap_internal_realloc(priority_heap); } - size_t hole = (*priority_heap)->size + 1; + size_t hole = priority_heap->size + 1; while (hole > 1 && - (*priority_heap) - ->less_fn(priority, - (*priority_heap)->nodes[hole / 2].priority) != 0) { - (*priority_heap)->nodes[hole] = (*priority_heap)->nodes[hole / 2]; + priority_heap->less_fn(priority, + priority_heap->nodes[hole / 2].priority) != 0) { + priority_heap->nodes[hole] = priority_heap->nodes[hole / 2]; hole /= 2; } - (*priority_heap)->nodes[hole].priority = priority; - (*priority_heap)->nodes[hole].data = data; - (*priority_heap)->nodes[hole].data_cleanup_fn = data_cleanup_fn; - (*priority_heap)->nodes[hole].is_valid = 1; + priority_heap->nodes[hole].priority = priority; + priority_heap->nodes[hole].data = data; + priority_heap->nodes[hole].data_cleanup_fn = data_cleanup_fn; + priority_heap->nodes[hole].is_valid = 1; - ++(*priority_heap)->size; + ++priority_heap->size; } void *simple_archiver_priority_heap_top(SDArchiverPHeap *priority_heap) { diff --git a/src/data_structures/priority_heap.h b/src/data_structures/priority_heap.h index 8e9e303..0ec1b02 100644 --- a/src/data_structures/priority_heap.h +++ b/src/data_structures/priority_heap.h @@ -46,7 +46,7 @@ SDArchiverPHeap *simple_archiver_priority_heap_init_less_fn( void simple_archiver_priority_heap_free(SDArchiverPHeap **priority_heap); /// If data_cleanup_fn is NULL, then "free()" is used on data when freed. -void simple_archiver_priority_heap_insert(SDArchiverPHeap **priority_heap, +void simple_archiver_priority_heap_insert(SDArchiverPHeap *priority_heap, long long priority, void *data, void (*data_cleanup_fn)(void *)); diff --git a/src/data_structures/test.c b/src/data_structures/test.c index 0144553..d34e3f1 100644 --- a/src/data_structures/test.c +++ b/src/data_structures/test.c @@ -229,7 +229,7 @@ int main(void) { for (unsigned int idx = 0; idx < 3; ++idx) { unsigned int *data = malloc(sizeof(unsigned int)); *data = idx; - simple_archiver_priority_heap_insert(&priority_heap, idx, data, NULL); + simple_archiver_priority_heap_insert(priority_heap, idx, data, NULL); } for (unsigned int idx = 0; idx < 3; ++idx) { unsigned int *data = simple_archiver_priority_heap_top(priority_heap); @@ -251,7 +251,7 @@ int main(void) { for (unsigned int idx = 0; idx < max; ++idx) { unsigned int *data = malloc(sizeof(unsigned int)); *data = idx; - simple_archiver_priority_heap_insert(&priority_heap, idx, data, NULL); + simple_archiver_priority_heap_insert(priority_heap, idx, data, NULL); } for (unsigned int idx = 0; idx < max; ++idx) { @@ -266,7 +266,7 @@ int main(void) { for (unsigned int idx = max; idx-- > 0;) { unsigned int *data = malloc(sizeof(unsigned int)); *data = idx; - simple_archiver_priority_heap_insert(&priority_heap, idx, data, NULL); + simple_archiver_priority_heap_insert(priority_heap, idx, data, NULL); } for (unsigned int idx = 0; idx < max; ++idx) { @@ -296,7 +296,7 @@ int main(void) { // Insert the deterministically randomized array. for (unsigned int idx = 0; idx < max; ++idx) { - simple_archiver_priority_heap_insert(&priority_heap, array[idx], + simple_archiver_priority_heap_insert(priority_heap, array[idx], array + idx, no_free_fn); } @@ -321,7 +321,7 @@ int main(void) { for (unsigned int idx = 0; idx < max; ++idx) { unsigned int *data = malloc(sizeof(unsigned int)); *data = idx; - simple_archiver_priority_heap_insert(&priority_heap, idx, data, NULL); + simple_archiver_priority_heap_insert(priority_heap, idx, data, NULL); } simple_archiver_priority_heap_free(&priority_heap); @@ -331,7 +331,7 @@ int main(void) { for (unsigned int idx = 0; idx < max; ++idx) { unsigned int *data = malloc(sizeof(unsigned int)); *data = idx; - simple_archiver_priority_heap_insert(&priority_heap, idx, data, NULL); + simple_archiver_priority_heap_insert(priority_heap, idx, data, NULL); } for (unsigned int idx = max; idx-- > 0;) { @@ -364,7 +364,7 @@ int main(void) { // Insert the deterministically randomized array. for (unsigned int idx = 0; idx < max; ++idx) { - simple_archiver_priority_heap_insert(&priority_heap, array[idx], + simple_archiver_priority_heap_insert(priority_heap, array[idx], array + idx, no_free_fn); }