Mercurial > hg > GearsTemplate
comparison src/parallel_execution/stack.c @ 87:9e139a340bd1 parallel_execution
rename directory
author | Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 19 Jan 2016 16:16:26 +0900 |
parents | src/tmp/stack.c@e06e1a9e569e |
children | f57e9ffa7960 |
comparison
equal
deleted
inserted
replaced
86:e06e1a9e569e | 87:9e139a340bd1 |
---|---|
1 #include <string.h> | |
2 #include "stack.h" | |
3 | |
4 stack_ptr stack_init(size_t size, int max) { | |
5 stack_ptr stack_ptr; | |
6 | |
7 if ((stack_ptr = calloc(1, sizeof(stack))) == NULL) | |
8 return NULL; | |
9 | |
10 if ((stack_ptr->data = calloc(max, size)) == NULL) { | |
11 free(stack_ptr); | |
12 return NULL; | |
13 } | |
14 | |
15 stack_ptr->size = size; | |
16 stack_ptr->max = max; | |
17 stack_ptr->num = 0; | |
18 | |
19 return stack_ptr; | |
20 } | |
21 | |
22 stack_ptr stack_realloc(stack_ptr stack_ptr, int max) { | |
23 if (stack_ptr == NULL) | |
24 return NULL; | |
25 | |
26 if ((stack_ptr->data = realloc(stack_ptr->data, stack_ptr->size*max)) == NULL) | |
27 return NULL; | |
28 | |
29 stack_ptr->max = max; | |
30 | |
31 return stack_ptr; | |
32 } | |
33 | |
34 void stack_free(stack_ptr stack_ptr) { | |
35 if (stack_ptr != NULL && stack_ptr->data != NULL) { | |
36 free(stack_ptr->data); | |
37 free(stack_ptr); | |
38 } | |
39 } | |
40 | |
41 int stack_push(stack_ptr stack_ptr, void* data) { | |
42 if (stack_ptr->max <= stack_ptr->num) | |
43 return -1; | |
44 | |
45 memcpy((char*)stack_ptr->data+stack_ptr->num*stack_ptr->size, data, stack_ptr->size); | |
46 stack_ptr->num++; | |
47 | |
48 return 0; | |
49 } | |
50 | |
51 int stack_pop(stack_ptr stack_ptr, void* data) { | |
52 if (stack_ptr->num == 0) | |
53 return -1; | |
54 | |
55 stack_ptr->num--; | |
56 | |
57 memcpy(data, (char*)stack_ptr->data+stack_ptr->num*stack_ptr->size, stack_ptr->size); | |
58 | |
59 return 0; | |
60 } | |
61 | |
62 int isMax(const stack_ptr stack_ptr) { | |
63 return stack_ptr->max<=stack_ptr->num; | |
64 } | |
65 | |
66 int isEmpty(const stack_ptr stack_ptr) { | |
67 return stack_ptr->num<=0; | |
68 } |