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