diff options
Diffstat (limited to 'priority_queue.h')
| -rw-r--r-- | priority_queue.h | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/priority_queue.h b/priority_queue.h new file mode 100644 index 0000000..45252a8 --- /dev/null +++ b/priority_queue.h @@ -0,0 +1,31 @@ +#ifndef PRIORITY_QUEUE_H_ +#define PRIORITY_QUEUE_H_ + +#include "structs.h" + +/* This is basically a sorted linked list + * Not sure if we need *prev, to be fair */ +struct PositionPQNode_s { + Position pos; + size_t priority; /* Lower is "better" */ + struct PositionPQNode_s *prev; + struct PositionPQNode_s *next; +} PositionPQNode_s; + +typedef struct PositionPQNode_s PositionPQ; + +/* Create a new PositionPQ with pos and priority */ +PositionPQ ppq_new(Position pos, size_t priority); + +/* Insert a pos with priority into a given PositionPQ */ +void ppq_insert(PositionPQ ppq, Position pos, size_t priority); + +/* Remove and return the position with the lowest priority */ +Position ppq_remove(PositionPQ ppq); + +/* Change the priority of a given pos, moving it to a different place in the + * linked list ("POTENTIALLY NOT NEEDED" since we don't use different weights */ +void ppq_reprioritize(PositionPQ ppq, Position pos, size_t priority); + + +#endif /* PRIORITY_QUEUE_H_ */ |
