summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoryexo <yexo@openttd.org>2010-02-25 11:48:50 +0000
committeryexo <yexo@openttd.org>2010-02-25 11:48:50 +0000
commitdd03cd54ee0050367e9583572ed9fadc083b4811 (patch)
treef25ed4bb8caacdeb44ab0e133c02d5abe5d50bef /src
parent7537fb18bcd1845d24b3fa3a71b36487edd3f1b7 (diff)
downloadopenttd-dd03cd54ee0050367e9583572ed9fadc083b4811.tar.xz
(svn r19242) -Codechange: Perfer pointer instead of reference (skidd13)
-Cleanup: merge PopHead() and RemoveHead() into Shift()
Diffstat (limited to 'src')
-rw-r--r--src/misc/binaryheap.hpp24
-rw-r--r--src/pathfinder/yapf/nodelist.hpp11
2 files changed, 15 insertions, 20 deletions
diff --git a/src/misc/binaryheap.hpp b/src/misc/binaryheap.hpp
index c95255e10..f90ec0b09 100644
--- a/src/misc/binaryheap.hpp
+++ b/src/misc/binaryheap.hpp
@@ -116,10 +116,10 @@ public:
/** Find the smallest item in the priority queue.
* Return the smallest item, or throw assert if empty. */
- FORCEINLINE T& GetHead()
+ FORCEINLINE T *Begin()
{
assert(!IsEmpty());
- return *m_items[1];
+ return m_items[1];
}
FORCEINLINE T *End()
@@ -129,7 +129,7 @@ public:
/** Insert new item into the priority queue, maintaining heap order.
* @return false if the queue is full. */
- FORCEINLINE void Push(T& new_item)
+ FORCEINLINE void Push(T *new_item)
{
if (IsFull()) {
m_max_size *= 2;
@@ -137,31 +137,27 @@ public:
}
/* make place for new item */
- uint gap = HeapifyUp(++m_size, &new_item);
- m_items[gap] = &new_item;
+ uint gap = HeapifyUp(++m_size, new_item);
+ m_items[gap] = new_item;
CheckConsistency();
}
/** Remove and return the smallest item from the priority queue. */
- FORCEINLINE T& PopHead()
- {
- T& ret = GetHead();
- RemoveHead();
- return ret;
- }
-
- /** Remove the smallest item from the priority queue. */
- FORCEINLINE void RemoveHead()
+ FORCEINLINE T *Shift()
{
assert(!IsEmpty());
+ T *first = Begin();
+
m_size--;
/* at index 1 we have a gap now */
T *last = End();
uint gap = HeapifyDown(1, last);
/* move last item to the proper place */
if (!IsEmpty()) m_items[gap] = last;
+
CheckConsistency();
+ return first;
}
/** Remove item specified by index */
diff --git a/src/pathfinder/yapf/nodelist.hpp b/src/pathfinder/yapf/nodelist.hpp
index 9260c45f7..6ac3b944c 100644
--- a/src/pathfinder/yapf/nodelist.hpp
+++ b/src/pathfinder/yapf/nodelist.hpp
@@ -93,7 +93,7 @@ public:
{
assert(m_closed.Find(item.GetKey()) == NULL);
m_open.Push(item);
- m_open_queue.Push(item);
+ m_open_queue.Push(&item);
if (&item == m_new_node) {
m_new_node = NULL;
}
@@ -103,8 +103,7 @@ public:
FORCEINLINE Titem_ *GetBestOpenNode()
{
if (!m_open_queue.IsEmpty()) {
- Titem_& item = m_open_queue.GetHead();
- return &item;
+ return m_open_queue.Begin();
}
return NULL;
}
@@ -113,9 +112,9 @@ public:
FORCEINLINE Titem_ *PopBestOpenNode()
{
if (!m_open_queue.IsEmpty()) {
- Titem_& item = m_open_queue.PopHead();
- m_open.Pop(item);
- return &item;
+ Titem_ *item = m_open_queue.Shift();
+ m_open.Pop(*item);
+ return item;
}
return NULL;
}