Home | History | Annotate | Line # | Download | only in include
      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