CBinaryHeapT< T > Class Template Reference

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

#include <binaryheap.hpp>

Public Member Functions

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

Protected Member Functions

FORCEINLINE uint HeapifyDown (uint gap, T *item)
 Get position for fixing a gap (downwards).
FORCEINLINE 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 algotithm, see http://www.policyalmanac.org/games/binaryHeaps.htm
Template Parameters:
T Type of the items stored in the binary heap

Definition at line 51 of file binaryheap.hpp.


Member Function Documentation

template<class T>
FORCEINLINE 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 175 of file binaryheap.hpp.

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

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

Make the priority queue empty.

All remaining items will remain untouched.

Definition at line 282 of file binaryheap.hpp.

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

Get the LAST item in the binary tree.

Note:
The last item is not neccesary the biggest!
Returns:
The last item

Definition at line 188 of file binaryheap.hpp.

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

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

Search for an item in the priority queue.

Matching is done by comparing adress of the item.

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

Definition at line 267 of file binaryheap.hpp.

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

template<class T>
FORCEINLINE uint CBinaryHeapT< T >::HeapifyDown ( uint  gap,
T *  item 
) [inline, protected]

Get position for fixing a gap (downwards).

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

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

Definition at line 82 of file binaryheap.hpp.

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

template<class T>
FORCEINLINE uint CBinaryHeapT< T >::HeapifyUp ( uint  gap,
T *  item 
) [inline, protected]

Get position for fixing a gap (upwards).

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

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

Definition at line 118 of file binaryheap.hpp.

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

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

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

Parameters:
new_item The pointer to the new item

Definition at line 198 of file binaryheap.hpp.

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

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

Test if the priority queue is full.

Returns:
True if full.

Definition at line 168 of file binaryheap.hpp.

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

template<class T>
FORCEINLINE 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 154 of file binaryheap.hpp.

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

Remove item at given index from the priority queue.

Parameters:
index The position of the item in the heap

Definition at line 239 of file binaryheap.hpp.

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

template<class T>
FORCEINLINE 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 217 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:

Generated on Thu Apr 14 00:48:58 2011 for OpenTTD by  doxygen 1.6.1