#ifndef PRIORITY_QUEUE_H_ #define PRIORITY_QUEUE_H_ #include "structs.h" /* This is basically a sorted linked list * Pro tip: if you always use the same priority, this becomes a regular queue */ struct PositionPQNode_s { Position pos; size_t priority; /* Lower is "better" */ 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 */ #define PPQ_INSERT_SUCCESS 0 #define PPQ_INSERT_NEW 1 /* ppq was NULL, created a new one */ #define PPQ_INSERT_ALREADY 2 /* pos is already in ppq */ int ppq_insert(PositionPQ **ppq, Position pos, size_t priority); /* Remove and return the position with the lowest priority */ Position ppq_pop(PositionPQ **ppq); /* Remove a given pos fron ppq */ void ppq_remove(PositionPQ **ppq, Position pos); /* 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); void ppq_free(PositionPQ *ppq); #endif /* PRIORITY_QUEUE_H_ */