-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathqueue.h
39 lines (34 loc) · 1.09 KB
/
queue.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/**
* Header file for implementation of a basic queue structure.
*
*/
#ifndef QUEUE
#define QUEUE
// Macro functions
#define queueSize(queue) ((queue)->size)
#define queueHead(queue) ((queue)->head)
#define isQueueHead(queue, item) ((item) == (queue)->head)
#define destroyQueueItem(queue, item) (((queue)->destroy)((item)->data))
typedef struct queueitem_ {
void *data;
struct queueitem_ *next;
} QueueItem;
typedef struct queue_ {
int size;
int (*destroy)(void *data);
char *(*toString)(void *data);
int (*compare)(void *key1, void *key2);
QueueItem *head;
QueueItem *tail;
} Queue;
Queue *initQueue(int (*destroy)(void *data), char *(*toString)(void *data),
int (*compare)(void *key1, void *key2));
QueueItem *initQueueItem(void *data);
QueueItem *freeQueueItem(Queue *queue, QueueItem *queueItem);
void enqueue(Queue *queue, void *data);
void *dequeue(Queue *queue);
void *peekQueue(Queue *queue);
void queuePrint(Queue *queue);
void queueItemPrint(Queue *queue, QueueItem *queueItem);
void freeQueue(Queue *queue);
#endif