56 lines
875 B
C
56 lines
875 B
C
#include "heap.h"
|
|
|
|
void heap_init(heap_t* heap)
|
|
{
|
|
assert(heap);
|
|
|
|
heap->size = 0;
|
|
heap->cap = 0;
|
|
heap->data = NULL;
|
|
}
|
|
|
|
void heap_free(heap_t* heap)
|
|
{
|
|
for (size_t i=0; i<heap->size; i++)
|
|
{
|
|
//value_free(heap->data[i]);
|
|
//free(heap->data[i]);
|
|
}
|
|
|
|
free(heap->data);
|
|
|
|
heap->size = 0;
|
|
heap->cap = 0;
|
|
heap->data = NULL;
|
|
}
|
|
|
|
size_t heap_alloc(heap_t* heap, value_t* value)
|
|
{
|
|
assert(heap);
|
|
|
|
if (heap->data == NULL)
|
|
{
|
|
heap->cap = 2;
|
|
heap->data = malloc(sizeof(value_t*) * heap->cap);
|
|
}
|
|
|
|
if (heap->size >= heap->cap)
|
|
{
|
|
heap->cap *= 2;
|
|
heap->data = realloc(heap->data, sizeof(value_t*) * heap->cap);
|
|
}
|
|
|
|
heap->data[heap->size] = value;
|
|
heap->size++;
|
|
|
|
return heap->size - 1;
|
|
}
|
|
|
|
value_t* heap_deref(heap_t* heap, size_t addr)
|
|
{
|
|
assert(heap);
|
|
assert(addr < heap->size);
|
|
|
|
return heap->data[addr];
|
|
}
|