Merge branch 'master' of https://github.com/dopefishh/mc1516pa
[mc1516pa.git] / modelchecker / deque.c
1 #include <argp.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <sylvan.h>
5 #include <lace.h>
6
7 #include "deque.h"
8
9 deque *create()
10 {
11 deque *d;
12 d = (deque *)malloc(sizeof(deque));
13 d->front = NULL;
14 d->rear = NULL;
15 d->count = 0;
16
17 return d;
18 }
19
20 deque *enq(state_t *s, deque *d)
21 {
22 if (d->rear == NULL){
23 d->rear = (node_t *)malloc(sizeof(node_t));
24 d->rear->ptr = NULL;
25 d->rear->s = s;
26 d->front = d->rear;
27 }
28 else {
29 node_t *temp = (node_t *)malloc(sizeof(node_t));
30 d->rear->ptr = temp;
31 temp->s = s;
32 temp->ptr = NULL;
33 d->rear = temp;
34 }
35 d->count++;
36
37 return d;
38 }
39
40 deque *deq(deque *d)
41 {
42 node_t *front_tmp = d->front;
43
44 if (front_tmp == NULL){
45 return d;
46 }
47 else if (front_tmp->ptr != NULL){
48 front_tmp = front_tmp->ptr;
49 free(d->front);
50 d->front = front_tmp;
51 }
52 else {
53 free(d->front);
54 d->front = NULL;
55 d->rear = NULL;
56 }
57 d->count--;
58 return d;
59 }
60
61 int isEmpty(deque *d)
62 {
63 if (d->front != NULL && d->rear != NULL) return 0;
64 else return 1;
65 }
66
67 state_t *get_front(deque *d)
68 {
69 if (isEmpty(d) == 0) return d->front->s;
70 else return NULL;
71 }