Remove heap tmp index (insert at back of heap instead)
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user