summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQuentin Young <qlyoung@cumulusnetworks.com>2017-04-17 00:06:02 +0000
committerQuentin Young <qlyoung@cumulusnetworks.com>2017-04-17 00:06:02 +0000
commit6cbc63316b75e72a04e57ffca146e81ee89d645c (patch)
tree67a20bba1871e3453586434207627eedce777867
parentb43d5ea3302a62133e249d0659e531becbcfbe8b (diff)
lib: add removal by item to pqueue
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
-rw-r--r--lib/pqueue.c8
-rw-r--r--lib/pqueue.h1
2 files changed, 9 insertions, 0 deletions
diff --git a/lib/pqueue.c b/lib/pqueue.c
index 0f870564da..fa502b462a 100644
--- a/lib/pqueue.c
+++ b/lib/pqueue.c
@@ -188,3 +188,11 @@ pqueue_remove_at (int index, struct pqueue *queue)
trickle_down (index, queue);
}
}
+
+void
+pqueue_remove (void *data, struct pqueue *queue)
+{
+ for (int i = 0; i < queue->size; i++)
+ if (queue->array[i] == data)
+ pqueue_remove_at (i, queue);
+}
diff --git a/lib/pqueue.h b/lib/pqueue.h
index 8bb6961d86..b39fb92ee9 100644
--- a/lib/pqueue.h
+++ b/lib/pqueue.h
@@ -39,6 +39,7 @@ extern void pqueue_delete (struct pqueue *queue);
extern void pqueue_enqueue (void *data, struct pqueue *queue);
extern void *pqueue_dequeue (struct pqueue *queue);
extern void pqueue_remove_at (int index, struct pqueue *queue);
+extern void pqueue_remove (void *data, struct pqueue *queue);
extern void trickle_down (int index, struct pqueue *queue);
extern void trickle_up (int index, struct pqueue *queue);