mirror of
https://github.com/celisej567/mcpe.git
synced 2026-09-04 19:36:43 +03:00
67 lines
1.1 KiB
C++
67 lines
1.1 KiB
C++
/********************************************************************
|
|
Minecraft: Pocket Edition - Decompilation Project
|
|
Copyright (C) 2023 iProgramInCpp
|
|
|
|
The following code is licensed under the BSD 1 clause license.
|
|
SPDX-License-Identifier: BSD-1-Clause
|
|
********************************************************************/
|
|
#pragma once
|
|
|
|
#include "Node.hpp"
|
|
|
|
class BinaryHeap
|
|
{
|
|
public:
|
|
BinaryHeap()
|
|
{
|
|
m_count = 0;
|
|
m_capacity = 1024;
|
|
m_items = new Node*[m_capacity];
|
|
}
|
|
|
|
~BinaryHeap()
|
|
{
|
|
if (m_items)
|
|
delete[] m_items;
|
|
}
|
|
|
|
void insert(Node* pNode);
|
|
void inlined0(int i);
|
|
void downHeap(int i);
|
|
|
|
Node* removeTop() {
|
|
Node* pNode = m_items[0];
|
|
m_items[0] = m_items[--m_count];
|
|
m_items[m_count] = 0;
|
|
|
|
if (m_count > 0)
|
|
downHeap(0);
|
|
|
|
pNode->field_0 = -1;
|
|
return pNode;
|
|
}
|
|
|
|
void clear() {
|
|
m_count = 0;
|
|
}
|
|
|
|
int size() const {
|
|
return m_count;
|
|
}
|
|
|
|
void setDistance(Node* pNode, float distance) {
|
|
float oldDistance = pNode->field_C;
|
|
pNode->field_C = distance;
|
|
|
|
if (oldDistance >= distance)
|
|
downHeap(pNode->field_0);
|
|
else
|
|
inlined0(pNode->field_0);
|
|
}
|
|
|
|
private:
|
|
Node** m_items;
|
|
int m_count;
|
|
int m_capacity;
|
|
};
|