removed duplicate function + added some comments to header files
[smdp.git] / cstack.c
1 #include <stdlib.h> // malloc, realloc
2
3 #include "include/cstack.h"
4
5 cstack_t *cstack_init() {
6     cstack_t *stack = malloc(sizeof(cstack_t));
7     stack->content = (void*)0;
8     stack->alloc = stack->size = 0;
9     stack->head = -1;
10     stack->push = cstack_push;
11     stack->pop = cstack_pop;
12     stack->top = cstack_top;
13     stack->empty = cstack_empty;
14     stack->delete = cstack_delete;
15     return stack;
16 }
17
18 void cstack_push(cstack_t *self, char c) {
19     if(self->size + sizeof(c) > self->alloc) {
20         self->alloc += (sizeof(char));
21         self->content = realloc(self->content, self->alloc);
22     }
23     self->content[++self->head] = c;
24     self->size += (sizeof(char));
25 }
26
27 char cstack_pop(cstack_t *self) {
28     self->size -= (sizeof(char));
29     return self->content[self->head--];
30 }
31
32 int cstack_top(cstack_t *self, char c) {
33     if(self->head >= 0 && self->content[self->head] == c)
34         return 1;
35     return 0;
36 }
37
38 int cstack_empty(cstack_t *self)  {
39    return self->head == -1;
40 }
41
42 void cstack_delete(cstack_t *self) {
43     free(self->content);
44     free(self);
45 }
46