From dc9028619511d04828ec15b1bbcb0abd1f97f4b2 Mon Sep 17 00:00:00 2001 From: Klemen Plestenjak Date: Sat, 18 Nov 2023 19:01:04 +0100 Subject: [PATCH] Remove heap tmp index (insert at back of heap instead) --- engine/breeze/utils/heap.c | 12 +++++++----- engine/breeze/utils/heap.h | 4 ++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/engine/breeze/utils/heap.c b/engine/breeze/utils/heap.c index d157c1f..0868020 100644 --- a/engine/breeze/utils/heap.c +++ b/engine/breeze/utils/heap.c @@ -21,7 +21,7 @@ static void heapSiftDown(BzHeapHead *head, void *heap); void *_bzHeapCreate(i32 startCapacity, i32 stride, i32 weightOffset) { - i32 numBytes = sizeof(BzHeapHead) + (startCapacity + 1) * stride; + i32 numBytes = sizeof(BzHeapHead) + startCapacity * stride; BzHeapHead *heap = bzAlloc(numBytes); heap[0] = (BzHeapHead) { .capacity=startCapacity, @@ -66,16 +66,18 @@ i32 _bzHeapPop(void *heap) { } void _bzHeapPush(void *heap) { BzHeapHead *head = HEAP_HEAD(heap); - BZ_ASSERT(head->size + 1 < head->capacity); + BZ_ASSERT(head->size < head->capacity); - void *item = ((u8 *)heap) + head->capacity * head->stride; + void *item = ((u8 *)heap) + head->size * head->stride; bzMemMove(((u8 *)heap) + head->size * head->stride, item, head->stride); head->size++; heapSiftUp(head, heap); } -i32 _bzHeapPushTmpIdx(void *heap) { - return HEAP_HEAD(heap)->capacity; +i32 _bzHeapPushIdx(void *heap) { + BzHeapHead *head = HEAP_HEAD(heap); + BZ_ASSERT(head->size < head->capacity); + return head->size; } static void heapSwap(BzHeapHead *head, void *heap, i32 aIdx, i32 bIdx) { diff --git a/engine/breeze/utils/heap.h b/engine/breeze/utils/heap.h index 4e7d67e..cead255 100644 --- a/engine/breeze/utils/heap.h +++ b/engine/breeze/utils/heap.h @@ -11,7 +11,7 @@ i32 _bzHeapSize(void *heap); bool _bzHeapIsEmpty(void *heap); i32 _bzHeapPop(void *heap); void _bzHeapPush(void *heap); -i32 _bzHeapPushTmpIdx(void *heap); +i32 _bzHeapPushIdx(void *heap); #define bzHeapCreate(T, n) (T *) ((T *)_bzHeapCreate((n), sizeof(T), offsetof(T, weight))) #define bzHeapDestroy(heap) _bzHeapDestroy((void *) (heap)) @@ -22,7 +22,7 @@ i32 _bzHeapPushTmpIdx(void *heap); #define bzHeapPop(heap) ((heap)[_bzHeapPop((void *) (heap))]) #define bzHeapPush(heap, ...) do { \ void *h = (void *) (heap); \ - (heap)[_bzHeapPushTmpIdx(h)] = (__VA_ARGS__); \ + (heap)[_bzHeapPushIdx(h)] = (__VA_ARGS__); \ _bzHeapPush(h); \ } while(0)