diff --git a/src/hb-priority-queue.hh b/src/hb-priority-queue.hh index 9c02eb423..b3c7ed84f 100644 --- a/src/hb-priority-queue.hh +++ b/src/hb-priority-queue.hh @@ -63,9 +63,11 @@ struct hb_priority_queue_t item_t pop_minimum () { - item_t result = heap[0]; + assert (!is_empty ()); - heap[0] = heap[heap.length - 1]; + item_t result = heap.arrayZ[0]; + + heap.arrayZ[0] = heap.arrayZ[heap.length - 1]; heap.shrink (heap.length - 1); bubble_down (0); @@ -104,6 +106,8 @@ struct hb_priority_queue_t void bubble_down (unsigned index) { + assert (index <= heap.length); + unsigned left = left_child (index); unsigned right = right_child (index); @@ -113,11 +117,11 @@ struct hb_priority_queue_t return; bool has_right = right < heap.length; - if (heap[index].first <= heap[left].first - && (!has_right || heap[index].first <= heap[right].first)) + if (heap.arrayZ[index].first <= heap.arrayZ[left].first + && (!has_right || heap[index].first <= heap.arrayZ[right].first)) return; - if (!has_right || heap[left].first < heap[right].first) + if (!has_right || heap.arrayZ[left].first < heap.arrayZ[right].first) { swap (index, left); bubble_down (left); @@ -130,10 +134,12 @@ struct hb_priority_queue_t void bubble_up (unsigned index) { + assert (index <= heap.length); + if (index == 0) return; unsigned parent_index = parent (index); - if (heap[parent_index].first <= heap[index].first) + if (heap.arrayZ[parent_index].first <= heap.arrayZ[index].first) return; swap (index, parent_index); diff --git a/src/test-priority-queue.cc b/src/test-priority-queue.cc index fab63acb6..e83d72c7e 100644 --- a/src/test-priority-queue.cc +++ b/src/test-priority-queue.cc @@ -73,17 +73,9 @@ test_extract () assert (queue.is_empty ()); } -static void -test_extract_empty () -{ - hb_priority_queue_t queue; - assert (queue.pop_minimum () == hb_pair (0, 0)); -} - int main (int argc, char **argv) { test_insert (); test_extract (); - test_extract_empty (); }