-
Notifications
You must be signed in to change notification settings - Fork 0
/
queue.h
117 lines (91 loc) · 2.06 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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/*=========================================================================
TEAM : Team 31, Team Flash, Very Fast Much Wow.
Members : Anant Srivastava
Bharat Singh
Wenbo Tian
Vidyaabharathi Vasudevan
Build Using : FLEX(2.6.0), BISON (GNU 3.0.4), C;
References : Compiler Construction using Flex and Bison,
Anthony A. Aaby,
email : aabyan@wwc.edu
version of Feburary 25,2004.
OPEN PUBLIC LISCENCE : https://opencontent.org/openpub
=========================================================================*/
#ifndef __QUEQE_H__
#define __QUEUE_H__
struct Queue {
char** element;
int size; /* size_t used because size and count cant be < 0*/
int count;
};
typedef struct Queue Queue;
struct activation_stask
{
char * name;
int offset;
Queue q;
};
struct activation_stask as[999];
void queue_init(Queue* queue)
{
queue->element = NULL;
queue->size = 0;
queue->count = 0;
}
void queue_push(Queue* queue, const char* str)
{
if (queue->size == 0) {
queue->size = 20;
queue->element = (char**)malloc(sizeof(char*) * queue->size);
int i = 0;
for (; i < queue->size; i++)
queue->element[i] = (char*) malloc(256 * sizeof(char));
}
if (queue->size == queue->count) {
queue->size *= 2;
queue->element = (char**)realloc(queue->element, sizeof(char*) * queue->size);
int i = queue->size/2;
for (; i < queue->size; i++)
queue->element[i] = (char*) malloc(256 * sizeof(char));
}
strcpy(queue->element[queue->count], str);
queue->count++;
}
char* queue_pop(Queue* queue)
{
if (queue->count > 0) {
char* top = queue->element[queue->count - 1];
queue->count--;
return top;
}
return 0;
}
char* queue_top(Queue* queue)
{
if (queue->count > 0) {
return queue->element[queue->count - 1];
}
return 0;
}
void queue_free(Queue* queue)
{
free(queue->element);
}
void activate(char *name, int arg)
{
arg--;
as[arg].name = name;
as[arg].offset = arg;
queue_init(&as[arg].q);
}
void deactivate(int arg)
{
arg--;
queue_free(&as[arg].q);
}
void add_para_to_as(int arg, char *para)
{
arg--;
queue_push(&as[arg].q, para);
}
#endif