-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathqueue.c
More file actions
61 lines (48 loc) · 1.22 KB
/
queue.c
File metadata and controls
61 lines (48 loc) · 1.22 KB
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#ifndef COMP310_A2_Q
#define COMP310_A2_Q
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/queue.h>
#include "queue.h"
struct queue_entry {
void *data;
STAILQ_ENTRY(queue_entry) entries;
};
STAILQ_HEAD(queue, queue_entry);
struct queue queue_create() {
struct queue q = STAILQ_HEAD_INITIALIZER(q);
return q;
}
void queue_init(struct queue *q) {
STAILQ_INIT(q);
}
void queue_error() {
fprintf(stderr, "Fatal error in queue operations\n");
exit(1);
}
struct queue_entry *queue_new_node(void *data) {
struct queue_entry *entry = (struct queue_entry*) malloc(sizeof(struct queue_entry));
if(!entry) {
queue_error();
}
entry->data = data;
return entry;
}
void queue_insert_head(struct queue *q, struct queue_entry *e) {
STAILQ_INSERT_HEAD(q, e, entries);
}
void queue_insert_tail(struct queue *q, struct queue_entry *e) {
STAILQ_INSERT_TAIL(q, e, entries);
}
struct queue_entry *queue_peek_front(struct queue *q) {
return STAILQ_FIRST(q);
}
struct queue_entry *queue_pop_head(struct queue *q) {
struct queue_entry *elem = queue_peek_front(q);
if(elem) {
STAILQ_REMOVE_HEAD(q, entries);
}
return elem;
}
#endif // COMP310_A2_Q