aboutsummaryrefslogtreecommitdiff
path: root/priority_queue.h
diff options
context:
space:
mode:
Diffstat (limited to 'priority_queue.h')
-rw-r--r--priority_queue.h31
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_ */