#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_pop(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_ */