1 /* ntp_prio_q.h 2 * 3 * This file contains the structures and function prototypes for the 4 * priority queue implementation used by the discrete event simulator. 5 * 6 * Written By: Sachin Kamboj 7 * University of Delaware 8 * Newark, DE 19711 9 * Copyright (c) 2006 10 */ 11 12 #ifndef NTP_PRIO_Q_H 13 #define NTP_PRIO_Q_H 14 15 #include <stddef.h> /* size_t */ 16 17 /* Structures for storing a priority queue 18 * --------------------------------------- 19 */ 20 21 typedef struct node { 22 union { 23 struct node *next; 24 double d; 25 } nodeu; 26 } node; 27 #define node_next nodeu.next 28 29 typedef int (*q_order_func)(const void *, const void *); 30 31 typedef struct Queue { 32 q_order_func get_order; 33 node * front; 34 int no_of_elements; 35 } queue; 36 37 38 /* FUNCTION PROTOTYPES 39 * ------------------- 40 */ 41 /* Define a function to create a FIFO queue */ 42 #define create_queue() create_priority_queue(&get_fifo_order) 43 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); 54 55 /* 56 * Preserve original callsite __FILE__ and __LINE__ for these 57 * malloc-like funcs when using MS C runtime debug heap. 58 */ 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__) 62 #else 63 # define create_priority_queue(order) debug_create_priority_queue(order) 64 # define get_node(size) debug_get_node(size) 65 #endif 66 67 queue *debug_create_priority_queue( 68 q_order_func get_order 69 #ifdef _CRTDBG_MAP_ALLOC 70 , const char * sourcefile 71 , int line_num 72 #endif 73 ); 74 75 void *debug_get_node( 76 size_t size 77 #ifdef _CRTDBG_MAP_ALLOC 78 , const char * sourcefile 79 , int line_num 80 #endif 81 ); 82 83 #endif /* NTP_PRIO_Q_H */ 84