Lines Matching defs:pq

25 	struct priorityq *pq;
27 pq = i_new(struct priorityq, 1);
28 pq->cmp_callback = cmp_callback;
29 i_array_init(&pq->items, init_size);
30 return pq;
35 struct priorityq *pq = *_pq;
38 array_free(&pq->items);
39 i_free(pq);
42 unsigned int priorityq_count(const struct priorityq *pq)
44 return array_count(&pq->items);
66 heap_item_bubble_up(struct priorityq *pq, unsigned int idx)
71 items = array_get_modifiable(&pq->items, &count);
76 if (pq->cmp_callback(items[idx], items[parent_idx]) >= 0)
86 static void heap_item_bubble_down(struct priorityq *pq, unsigned int idx)
91 items = array_get_modifiable(&pq->items, &count);
95 pq->cmp_callback(items[left_idx], items[right_idx]) < 0)
100 if (pq->cmp_callback(items[min_child_idx], items[idx]) >= 0)
109 void priorityq_add(struct priorityq *pq, struct priorityq_item *item)
111 item->idx = array_count(&pq->items);
112 array_append(&pq->items, &item, 1);
113 (void)heap_item_bubble_up(pq, item->idx);
116 static void priorityq_remove_idx(struct priorityq *pq, unsigned int idx)
121 items = array_get_modifiable(&pq->items, &count);
127 array_delete(&pq->items, count, 1);
131 idx = heap_item_bubble_up(pq, idx);
132 heap_item_bubble_down(pq, idx);
136 void priorityq_remove(struct priorityq *pq, struct priorityq_item *item)
138 priorityq_remove_idx(pq, item->idx);
142 struct priorityq_item *priorityq_peek(struct priorityq *pq)
146 if (array_count(&pq->items) == 0)
149 items = array_idx(&pq->items, 0);
153 struct priorityq_item *priorityq_pop(struct priorityq *pq)
157 item = priorityq_peek(pq);
159 priorityq_remove_idx(pq, 0);
165 struct priorityq_item *const *priorityq_items(struct priorityq *pq)
167 if (array_count(&pq->items) == 0)
170 return array_idx(&pq->items, 0);