comparison src/llrb/stack.c @ 69:368306e1bfed

llrb deletion(not work).
author Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
date Tue, 20 Oct 2015 16:22:42 +0900
parents
children dc6f665bb753
comparison
equal deleted inserted replaced
66:a870c84acd0e 69:368306e1bfed
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 }