xref: /netbsd-src/external/bsd/ntp/dist/include/ntp_prio_q.h (revision cdfa2a7ef92791ba9db70a584a1d904730e6fb46)
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