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