(svn r19244) -Codechange: Remove function call if consistency-check is not used (skidd13)

This commit is contained in:
yexo 2010-02-25 11:50:30 +00:00
parent 55e5a38d15
commit f8a67c21e4

View File

@ -12,6 +12,15 @@
#ifndef BINARYHEAP_HPP #ifndef BINARYHEAP_HPP
#define BINARYHEAP_HPP #define BINARYHEAP_HPP
/* Enable it if you suspect binary heap doesn't work well */
#define BINARYHEAP_CHECK 0
#if BINARYHEAP_CHECK
#define CHECK_CONSISTY() CheckConsistency()
#else
#define CHECK_CONSISTY() ;
#endif
/** /**
* Binary Heap as C++ template. * Binary Heap as C++ template.
* *
@ -99,6 +108,17 @@ protected:
return gap; return gap;
} }
#if BINARYHEAP_CHECK
/** verifies the heap consistency (added during first YAPF debug phase) */
FORCEINLINE void CheckConsistency()
{
for (uint child = 2; child <= items; child++) {
uint parent = child / 2;
assert(!(*data[child] < *data[parent]));
}
}
#endif
public: public:
/** Return the number of items stored in the priority queue. /** Return the number of items stored in the priority queue.
* @return number of items in the queue */ * @return number of items in the queue */
@ -137,7 +157,7 @@ public:
/* make place for new item */ /* make place for new item */
uint gap = HeapifyUp(++items, new_item); uint gap = HeapifyUp(++items, new_item);
data[gap] = new_item; data[gap] = new_item;
CheckConsistency(); CHECK_CONSISTY();
} }
/** Remove and return the smallest item from the priority queue. */ /** Remove and return the smallest item from the priority queue. */
@ -154,7 +174,7 @@ public:
/* move last item to the proper place */ /* move last item to the proper place */
if (!IsEmpty()) data[gap] = last; if (!IsEmpty()) data[gap] = last;
CheckConsistency(); CHECK_CONSISTY();
return first; return first;
} }
@ -176,7 +196,7 @@ public:
assert(index == items); assert(index == items);
items--; items--;
} }
CheckConsistency(); CHECK_CONSISTY();
} }
/** return index of the item that matches (using &item1 == &item2) the given item. */ /** return index of the item that matches (using &item1 == &item2) the given item. */
@ -194,18 +214,6 @@ public:
/** Make the priority queue empty. /** Make the priority queue empty.
* All remaining items will remain untouched. */ * All remaining items will remain untouched. */
FORCEINLINE void Clear() { items = 0; } FORCEINLINE void Clear() { items = 0; }
/** verifies the heap consistency (added during first YAPF debug phase) */
FORCEINLINE void CheckConsistency()
{
/* enable it if you suspect binary heap doesn't work well */
#if 0
for (uint child = 2; child <= items; child++) {
uint parent = child / 2;
assert(!(*data[child] < *data[parent]));
}
#endif
}
}; };
#endif /* BINARYHEAP_HPP */ #endif /* BINARYHEAP_HPP */