diff options
| author | Kirill Petrashin <kirill8201@yandex.ru> | 2026-03-29 15:39:50 +0300 |
|---|---|---|
| committer | Kirill Petrashin <kirill8201@yandex.ru> | 2026-03-29 15:39:50 +0300 |
| commit | 6b5b7c9060f4e317ed5463772369e727fcfeeb05 (patch) | |
| tree | 10f076f4eec5acfea6c505c41d3dbf2db08e522b /priority_queue.c | |
| parent | 40d4d279e41c336d5c4e9a1e07c7751bc76ecbfb (diff) | |
| download | astar-6b5b7c9060f4e317ed5463772369e727fcfeeb05.tar.xz | |
Implement ppq_remove() (possibly buggy idk)
Diffstat (limited to 'priority_queue.c')
| -rw-r--r-- | priority_queue.c | 26 |
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(); |
