aboutsummaryrefslogtreecommitdiff
path: root/priority_queue.c
diff options
context:
space:
mode:
Diffstat (limited to 'priority_queue.c')
-rw-r--r--priority_queue.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/priority_queue.c b/priority_queue.c
index c8bd8b0..472f5c3 100644
--- a/priority_queue.c
+++ b/priority_queue.c
@@ -12,6 +12,7 @@ PositionPQ *ppq_new(Position pos, size_t priority) {
return ppq;
}
+/* FIXME: this is shitty */
void ppq_insert(PositionPQ **ppq, Position pos, size_t priority) {
PositionPQ *start = *ppq;
@@ -29,8 +30,12 @@ void ppq_insert(PositionPQ **ppq, Position pos, size_t priority) {
PositionPQ *temp = *ppq;
- while(temp->next != NULL && temp->next->priority <= priority)
+ while(temp->next != NULL && temp->next->priority <= priority) {
+ if (temp->pos.x == pos.x && temp->pos.y == pos.y && temp->priority <= priority) {
+ return; /* pos is already at the start of ppq with a fine priority */
+ }
temp = temp->next;
+ }
n->next = temp->next;
temp->next = n;