23 class BinaryHeapIndexTracker_None
27 static void OnRemove(T& ) {}
28 static void OnSwap(T& , T& ) {}
33 class BinaryHeapIndexTracker_IndexInBinaryHeap
37 static KY_INLINE
void OnAdd(T& value,
KyUInt32 indexInBinaryHeap) { value.m_indexInBinaryHeap = indexInBinaryHeap; }
39 static KY_INLINE
void OnRemove(T& value) { value.m_indexInBinaryHeap = BinaryHeapInvalidReference; }
41 static KY_INLINE
void OnSwap(T& lhs, T& rhs) { Alg::Swap(lhs.m_indexInBinaryHeap, rhs.m_indexInBinaryHeap); }
48 class BinaryHeapIndexTracker_IndexInBinaryHeap<T*>
52 static KY_INLINE
void OnAdd(T*& value,
KyUInt32 indexInBinaryHeap) { value->m_indexInBinaryHeap = indexInBinaryHeap; }
54 static KY_INLINE
void OnRemove(T*& value) { value->m_indexInBinaryHeap = BinaryHeapInvalidReference; }
56 static KY_INLINE
void OnSwap(T*& lhs, T*& rhs) { Alg::Swap(lhs->m_indexInBinaryHeap, rhs->m_indexInBinaryHeap); }
64 template <
class T,
typename ArrayType = KyArray<T>,
typename Comparator = DefaultLess<T>,
typename BinaryHeapIndexTracker = BinaryHeapIndexTracker_None<T> >
70 typedef typename ArrayType::Iterator Iterator;
71 typedef typename ArrayType::ConstIterator ConstIterator;
76 KY_INLINE
void GetFirst(T& item) const;
80 KY_INLINE const T& GetFirst()
const {
return *Begin(); }
84 void Insert(
const T& item);
94 void ExtractFirst(T& item);
96 KY_INLINE
void Clear() { m_heap.Clear(); }
97 KY_INLINE
void Reserve(
KyUInt32 size) {
return m_heap.Reserve(size); }
100 KY_INLINE
KyUInt32 GetCapacity()
const {
return (
KyUInt32)m_heap.GetCapacity();}
101 KY_INLINE
bool IsEmpty()
const {
return GetCount() == 0; }
103 bool IsSorted()
const;
109 KY_INLINE
const T& operator[](
KyUInt32 index)
const {
return m_heap[index]; }
110 KY_INLINE T& operator[](
KyUInt32 index) {
return m_heap[index]; }
125 Iterator Erase(Iterator it);
128 KY_INLINE ConstIterator Begin()
const {
return m_heap.Begin(); }
129 KY_INLINE Iterator Begin() {
return m_heap.Begin(); }
132 KY_INLINE ConstIterator End()
const {
return m_heap.End(); }
133 KY_INLINE Iterator End() {
return m_heap.End(); }
135 Comparator& GetComparator() {
return m_comparator; }
136 ArrayType& GetHeap() {
return m_heap; }
138 KY_INLINE ConstIterator GetLast()
const {
return ConstIterator(&m_heap, (GetCount() - 1)); }
139 KY_INLINE Iterator GetLast() {
return Iterator(&m_heap, (GetCount() - 1)); }
141 KY_INLINE ConstIterator GetParent(ConstIterator it)
const {
return Begin() + ((GetIndex(it) - 1) >> 1);}
142 KY_INLINE Iterator GetParent(Iterator it) {
return Begin() + ((GetIndex(it) - 1) >> 1);}
145 KY_INLINE ConstIterator GetLeft(ConstIterator it)
const {
return Begin() + 1 + (GetIndex(it) << 1);}
146 KY_INLINE Iterator GetLeft(Iterator it) {
return Begin() + 1 + (GetIndex(it) << 1);}
149 KY_INLINE ConstIterator GetRight(ConstIterator it)
const {
return Begin() + 2 + (GetIndex(it) << 1);}
150 KY_INLINE Iterator GetRight(Iterator it) {
return Begin() + 2 + (GetIndex(it) << 1);}
152 KY_INLINE
KyUInt32 GetIndex(ConstIterator it)
const {
return KyUInt32(it.GetIndex()); }
153 KY_INLINE
KyUInt32 GetIndex(Iterator it)
const {
return KyUInt32(it.GetIndex()); }
156 void PercolateUp(Iterator hole);
159 void PercolateDown(Iterator hole);
163 Comparator m_comparator;
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:132
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
#define KyUInt32MAXVAL
KyUInt32 max value
Definition: types.h:68