8560674afd
Thanks to roberto for providing pointers to wedge this into HEAD. Approved by: roberto
84 lines
1.9 KiB
C
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 */
|