roza/lib/heap.c

56 lines
871 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];
}