3 * This file contains the structures and function prototypes for the
4 * priority queue implementation used by the discrete event simulator.
6 * Written By: Sachin Kamboj
7 * University of Delaware
15 #include <stddef.h> /* size_t */
17 /* Structures for storing a priority queue
18 * ---------------------------------------
27 #define node_next nodeu.next
29 typedef int (*q_order_func)(const void *, const void *);
31 typedef struct Queue {
32 q_order_func get_order;
38 /* FUNCTION PROTOTYPES
41 /* Define a function to create a FIFO queue */
42 #define create_queue() create_priority_queue(&get_fifo_order)
44 void destroy_queue(queue *my_queue);
45 void free_node(void *my_node);
46 void *next_node(void *my_node);
47 int empty(queue *my_queue);
48 void *queue_head(queue *my_queue);
49 queue *enqueue(queue *my_queue, void *my_node);
50 void append_queue(queue *q1, queue *q2);
51 void *dequeue(queue *my_queue);
52 int get_no_of_elements(queue *my_queue);
53 int get_fifo_order(const void *el1, const void *el2);
56 * Preserve original callsite __FILE__ and __LINE__ for these
57 * malloc-like funcs when using MS C runtime debug heap.
59 #ifdef _CRTDBG_MAP_ALLOC
60 # define create_priority_queue(order) debug_create_priority_queue(order, __FILE__, __LINE__)
61 # define get_node(size) debug_get_node(size, __FILE__, __LINE__)
63 # define create_priority_queue(order) debug_create_priority_queue(order)
64 # define get_node(size) debug_get_node(size)
67 queue *debug_create_priority_queue(
68 q_order_func get_order
69 #ifdef _CRTDBG_MAP_ALLOC
70 , const char * sourcefile
77 #ifdef _CRTDBG_MAP_ALLOC
78 , const char * sourcefile
83 #endif /* NTP_PRIO_Q_H */