aboutsummaryrefslogtreecommitdiff
path: root/priority_queue.c
diff options
context:
space:
mode:
Diffstat (limited to 'priority_queue.c')
-rw-r--r--priority_queue.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/priority_queue.c b/priority_queue.c
index de6c179..6460a9e 100644
--- a/priority_queue.c
+++ b/priority_queue.c
@@ -67,6 +67,32 @@ Position ppq_pop(PositionPQ **ppq) {
return pos;
}
+void ppq_remove(PositionPQ **ppq, Position pos) {
+ PositionPQ *temp = *ppq;
+
+ if (temp == NULL) {
+ error("Tried to remove a pos from a NULL PositionPQ\n");
+ }
+
+ PositionPQ *prev = NULL;
+
+ while (temp->next != NULL && (pos.x != temp->pos.x || pos.y != temp->pos.y)) {
+ prev = temp;
+ temp = temp->next;
+ }
+
+ if (pos.x == temp->pos.x && pos.y == temp->pos.y) {
+ if (prev != NULL) {
+ prev->next = temp->next;
+ free(temp);
+ } else {
+ prev = *ppq;
+ *ppq = (*ppq)->next;
+ free(prev);
+ }
+ }
+}
+
void ppq_reprioritize(PositionPQ *ppq, Position pos, size_t priority) {
(void)ppq, (void)pos, (void)priority;
todo();