25 typename Compare = std::greater<T>
35 if (_size >= Capacity) {
39 _data[_size] = std::forward<U>(value);
54 _data[0] = std::move(_data[_size]);
61 [[nodiscard]]
const T&
top() const noexcept {
62 assert(_size > 0 &&
"Accessing top of empty StaticMinHeap");
67 [[nodiscard]] T&
top() noexcept {
68 assert(_size > 0 &&
"Accessing top of empty StaticMinHeap");
73 [[nodiscard]]
constexpr std::size_t
size() const noexcept {
78 [[nodiscard]]
static constexpr std::size_t
capacity() noexcept {
83 [[nodiscard]]
constexpr bool empty() const noexcept {
88 [[nodiscard]]
constexpr bool full() const noexcept {
89 return _size >= Capacity;
98 [[nodiscard]] T*
data() noexcept {
103 [[nodiscard]]
const T*
data() const noexcept {
110 std::size_t current = index;
113 std::size_t left = 2 * current + 1;
114 std::size_t right = 2 * current + 2;
115 std::size_t smallest = current;
117 if (left < _size && comp(_data[smallest], _data[left])) {
120 if (right < _size && comp(_data[smallest], _data[right])) {
124 if (smallest != current) {
126 swap(_data[current], _data[smallest]);
135 void siftUp(std::size_t index)
noexcept {
137 std::size_t current = index;
139 while (current > 0) {
140 std::size_t parent = (current - 1) / 2;
141 if (comp(_data[parent], _data[current])) {
143 swap(_data[parent], _data[current]);
152 std::array<T, Capacity> _data{};
153 std::size_t _size{0};
Fixed-capacity statically-allocated binary min-heap. Zero dynamic heap allocations.
Definition StaticMinHeap.hpp:27
bool push(U &&value)
Push an element into the heap.
Definition StaticMinHeap.hpp:34
const T & top() const noexcept
Access top element.
Definition StaticMinHeap.hpp:61
constexpr bool full() const noexcept
Check if heap is full.
Definition StaticMinHeap.hpp:88
static constexpr std::size_t capacity() noexcept
Maximum capacity of the heap.
Definition StaticMinHeap.hpp:78
constexpr std::size_t size() const noexcept
Current number of elements in the heap.
Definition StaticMinHeap.hpp:73
T * data() noexcept
Direct access to underlying data array.
Definition StaticMinHeap.hpp:98
const T * data() const noexcept
Direct const access to underlying data array.
Definition StaticMinHeap.hpp:103
void siftDown(std::size_t index) noexcept
Sift down an element at specified index (e.g. after in-place modification).
Definition StaticMinHeap.hpp:108
void siftUp(std::size_t index) noexcept
Sift up an element at specified index.
Definition StaticMinHeap.hpp:135
constexpr bool empty() const noexcept
Check if heap is empty.
Definition StaticMinHeap.hpp:83
void clear() noexcept
Clear all elements.
Definition StaticMinHeap.hpp:93
constexpr StaticMinHeap()=default
T & top() noexcept
Access mutable top element.
Definition StaticMinHeap.hpp:67
bool pop() noexcept
Remove the top element from the heap.
Definition StaticMinHeap.hpp:47
Definition CallableTraits.hpp:12