# HG changeset patch # User Shohei KOKUBO # Date 1430426110 -32400 # Node ID 390cf0523ea7a62d6b0142f7aaa2948d6ad152d1 # Parent 7494c0b87ec47afebbbc2282d492faef1b1c9897 add file diff -r 7494c0b87ec4 -r 390cf0523ea7 src/llrb/llrb.c --- a/src/llrb/llrb.c Fri May 01 05:20:47 2015 +0900 +++ b/src/llrb/llrb.c Fri May 01 05:35:10 2015 +0900 @@ -266,12 +266,13 @@ } __code code5(struct Context* context) { - c2 = clock(); - //printf("%ld %ld\n", context->data[1]->count-1, (long)c2-c1); puts("---prev---"); print_tree(pre, 0); puts("---follow---"); print_tree(context->data[Tree]->tree.root, 0); + puts("--Number of Data--"); + printf("%d\n", context->dataNum); + stack_free(pstack); goto meta(context, Exit); } diff -r 7494c0b87ec4 -r 390cf0523ea7 src/llrb/stack.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/llrb/stack.h Fri May 01 05:35:10 2015 +0900 @@ -0,0 +1,74 @@ +#include + +typedef struct { + size_t size; + int max; + int num; + void* data; +} stack, *stack_ptr; + +stack_ptr stack_init(size_t size, int max) { + stack_ptr stack_ptr; + + if ((stack_ptr = calloc(1, sizeof(stack))) == NULL) + return NULL; + + if ((stack_ptr->data = calloc(max, size)) == NULL) { + free(stack_ptr); + return NULL; + } + + stack_ptr->size = size; + stack_ptr->max = max; + stack_ptr->num = 0; + + return stack_ptr; +} + +stack_ptr stack_realloc(stack_ptr stack_ptr, int max) { + if (stack_ptr == NULL) + return NULL; + + if ((stack_ptr->data = realloc(stack_ptr->data, stack_ptr->size*max)) == NULL) + return NULL; + + stack_ptr->max = max; + + return stack_ptr; +} + +void stack_free(stack_ptr stack_ptr) { + if (stack_ptr != NULL && stack_ptr->data != NULL) { + free(stack_ptr->data); + free(stack_ptr); + } +} + +int stack_push(stack_ptr stack_ptr, void* data) { + if (stack_ptr->max <= stack_ptr->num) + return -1; + + memcpy((char*)stack_ptr->data+stack_ptr->num*stack_ptr->size, data, stack_ptr->size); + stack_ptr->num++; + + return 0; +} + +int stack_pop(stack_ptr stack_ptr, void* data) { + if (stack_ptr->num == 0) + return -1; + + stack_ptr->num--; + + memcpy(data, (char*)stack_ptr->data+stack_ptr->num*stack_ptr->size, stack_ptr->size); + + return 0; +} + +int isMax(const stack_ptr stack_ptr) { + return stack_ptr->max<=stack_ptr->num; +} + +int isEmpty(const stack_ptr stack_ptr) { + return stack_ptr->num<=0; +}