OpenTTD
Public Member Functions | Protected Member Functions | Private Attributes
CBinaryHeapT< T > Class Template Reference

Binary Heap as C++ template. More...

#include <binaryheap.hpp>

Public Member Functions

 CBinaryHeapT (uint max_items)
 Create a binary heap.
uint Length () const
 Get the number of items stored in the priority queue.
bool IsEmpty () const
 Test if the priority queue is empty.
bool IsFull () const
 Test if the priority queue is full.
T * Begin ()
 Get the smallest item in the binary tree.
T * End ()
 Get the LAST item in the binary tree.
void Include (T *new_item)
 Insert new item into the priority queue, maintaining heap order.
T * Shift ()
 Remove and return the smallest (and also first) item from the priority queue.
void Remove (uint index)
 Remove item at given index from the priority queue.
uint FindIndex (const T &item) const
 Search for an item in the priority queue.
void Clear ()
 Make the priority queue empty.

Protected Member Functions

uint HeapifyDown (uint gap, T *item)
 Get position for fixing a gap (downwards).
uint HeapifyUp (uint gap, T *item)
 Get position for fixing a gap (upwards).

Private Attributes

uint items
 Number of items in the heap.
uint capacity
 Maximum number of items the heap can hold.
T ** data
 The pointer to the heap item pointers.

Detailed Description

template<class T>
class CBinaryHeapT< T >

Binary Heap as C++ template.

A carrier which keeps its items automatically holds the smallest item at the first position. The order of items is maintained by using a binary tree. The implementation is used for priority queue's.

Usage information:
Item of the binary heap should support the 'lower-than' operator '<'. It is used for comparing items before moving them to their position.
This binary heap allocates just the space for item pointers. The items are allocated elsewhere.
Implementation notes:
Internally the first item is never used, because that simplifies the implementation.
For further information about the Binary Heap algorithm, see http://www.policyalmanac.org/games/binaryHeaps.htm
Template Parameters
TType of the items stored in the binary heap

Definition at line 53 of file binaryheap.hpp.

Constructor & Destructor Documentation

template<class T>
CBinaryHeapT< T >::CBinaryHeapT ( uint  max_items)
inlineexplicit

Create a binary heap.

Parameters
max_itemsThe limit of the heap

Definition at line 64 of file binaryheap.hpp.

Member Function Documentation

template<class T>
T* CBinaryHeapT< T >::Begin ( )
inline

Get the smallest item in the binary tree.

Returns
The smallest item, or throw assert if empty.

Definition at line 190 of file binaryheap.hpp.

Referenced by CNodeList_HashTableT< Titem_, Thash_bits_open_, Thash_bits_closed_ >::GetBestOpenNode(), and CBinaryHeapT< Titem_ >::Shift().

template<class T>
void CBinaryHeapT< T >::Clear ( )
inline

Make the priority queue empty.

All remaining items will remain untouched.

Definition at line 299 of file binaryheap.hpp.

template<class T>
T* CBinaryHeapT< T >::End ( )
inline

Get the LAST item in the binary tree.

Note
The last item is not necessary the biggest!
Returns
The last item

Definition at line 203 of file binaryheap.hpp.

Referenced by CBinaryHeapT< Titem_ >::Remove(), and CBinaryHeapT< Titem_ >::Shift().

template<class T>
uint CBinaryHeapT< T >::FindIndex ( const T &  item) const
inline

Search for an item in the priority queue.

Matching is done by comparing address of the item.

Parameters
itemThe reference to the item
Returns
The index of the item or zero if not found

Definition at line 284 of file binaryheap.hpp.

Referenced by CNodeList_HashTableT< Titem_, Thash_bits_open_, Thash_bits_closed_ >::PopOpenNode().

template<class T>
uint CBinaryHeapT< T >::HeapifyDown ( uint  gap,
T *  item 
)
inlineprotected

Get position for fixing a gap (downwards).

The gap is moved downwards in the binary tree until it is in order again.

Parameters
gapThe position of the gap
itemThe proposed item for filling the gap
Returns
The (gap)position where the item fits

Definition at line 88 of file binaryheap.hpp.

Referenced by CBinaryHeapT< Titem_ >::Remove(), and CBinaryHeapT< Titem_ >::Shift().

template<class T>
uint CBinaryHeapT< T >::HeapifyUp ( uint  gap,
T *  item 
)
inlineprotected

Get position for fixing a gap (upwards).

The gap is moved upwards in the binary tree until the is in order again.

Parameters
gapThe position of the gap
itemThe proposed item for filling the gap
Returns
The (gap)position where the item fits

Definition at line 124 of file binaryheap.hpp.

Referenced by CBinaryHeapT< Titem_ >::Include(), and CBinaryHeapT< Titem_ >::Remove().

template<class T>
void CBinaryHeapT< T >::Include ( T *  new_item)
inline

Insert new item into the priority queue, maintaining heap order.

Parameters
new_itemThe pointer to the new item

Definition at line 213 of file binaryheap.hpp.

Referenced by CNodeList_HashTableT< Titem_, Thash_bits_open_, Thash_bits_closed_ >::InsertOpenNode().

template<class T>
bool CBinaryHeapT< T >::IsEmpty ( ) const
inline
template<class T>
bool CBinaryHeapT< T >::IsFull ( ) const
inline

Test if the priority queue is full.

Returns
True if full.

Definition at line 180 of file binaryheap.hpp.

Referenced by CBinaryHeapT< Titem_ >::Include().

template<class T>
uint CBinaryHeapT< T >::Length ( ) const
inline

Get the number of items stored in the priority queue.

Returns
The number of items in the queue

Definition at line 160 of file binaryheap.hpp.

template<class T>
void CBinaryHeapT< T >::Remove ( uint  index)
inline

Remove item at given index from the priority queue.

Parameters
indexThe position of the item in the heap

Definition at line 256 of file binaryheap.hpp.

Referenced by CNodeList_HashTableT< Titem_, Thash_bits_open_, Thash_bits_closed_ >::PopOpenNode().

template<class T>
T* CBinaryHeapT< T >::Shift ( )
inline

Remove and return the smallest (and also first) item from the priority queue.

Returns
The pointer to the removed item

Definition at line 234 of file binaryheap.hpp.

Referenced by CNodeList_HashTableT< Titem_, Thash_bits_open_, Thash_bits_closed_ >::PopBestOpenNode().


The documentation for this class was generated from the following file: