#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 * UPDATE: we do need *prev. */ struct PositionPQNode_s { Position pos; size_t priority; /* Lower is "better" */ struct PositionPQNode_s *prev; struct PositionPQNode_s *next; }; 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 */ int 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); void ppq_print(PositionPQ *ppq); #endif /* PRIORITY_QUEUE_H_ */