diff options
author | yexo <yexo@openttd.org> | 2010-02-25 11:48:50 +0000 |
---|---|---|
committer | yexo <yexo@openttd.org> | 2010-02-25 11:48:50 +0000 |
commit | dd03cd54ee0050367e9583572ed9fadc083b4811 (patch) | |
tree | f25ed4bb8caacdeb44ab0e133c02d5abe5d50bef /src | |
parent | 7537fb18bcd1845d24b3fa3a71b36487edd3f1b7 (diff) | |
download | openttd-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.hpp | 24 | ||||
-rw-r--r-- | src/pathfinder/yapf/nodelist.hpp | 11 |
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; } |