freebsd-nq/contrib/ntp/include/ntp_prio_q.h
Cy Schubert 2b15cb3d09 MFV ntp 4.2.8p1 (r258945, r275970, r276091, r276092, r276093, r278284)
Thanks to roberto for providing pointers to wedge this into HEAD.

Approved by:	roberto
2015-03-30 13:30:15 +00:00

84 lines
1.9 KiB
C

/* ntp_prio_q.h
*
* This file contains the structures and function prototypes for the
* priority queue implementation used by the discrete event simulator.
*
* Written By: Sachin Kamboj
* University of Delaware
* Newark, DE 19711
* Copyright (c) 2006
*/
#ifndef NTP_PRIO_Q_H
#define NTP_PRIO_Q_H
#include <stddef.h> /* size_t */
/* Structures for storing a priority queue
* ---------------------------------------
*/
typedef struct node {
union {
struct node *next;
double d;
} nodeu;
} node;
#define node_next nodeu.next
typedef int (*q_order_func)(const void *, const void *);
typedef struct Queue {
q_order_func get_order;
node * front;
int no_of_elements;
} queue;
/* FUNCTION PROTOTYPES
* -------------------
*/
/* Define a function to create a FIFO queue */
#define create_queue() create_priority_queue(&get_fifo_order)
void destroy_queue(queue *my_queue);
void free_node(void *my_node);
void *next_node(void *my_node);
int empty(queue *my_queue);
void *queue_head(queue *my_queue);
queue *enqueue(queue *my_queue, void *my_node);
void append_queue(queue *q1, queue *q2);
void *dequeue(queue *my_queue);
int get_no_of_elements(queue *my_queue);
int get_fifo_order(const void *el1, const void *el2);
/*
* Preserve original callsite __FILE__ and __LINE__ for these
* malloc-like funcs when using MS C runtime debug heap.
*/
#ifdef _CRTDBG_MAP_ALLOC
# define create_priority_queue(order) debug_create_priority_queue(order, __FILE__, __LINE__)
# define get_node(size) debug_get_node(size, __FILE__, __LINE__)
#else
# define create_priority_queue(order) debug_create_priority_queue(order)
# define get_node(size) debug_get_node(size)
#endif
queue *debug_create_priority_queue(
q_order_func get_order
#ifdef _CRTDBG_MAP_ALLOC
, const char * sourcefile
, int line_num
#endif
);
void *debug_get_node(
size_t size
#ifdef _CRTDBG_MAP_ALLOC
, const char * sourcefile
, int line_num
#endif
);
#endif /* NTP_PRIO_Q_H */