Mercurial > hg > Gears > GearsAgda
view src/parallel_execution/stack.c @ 101:8987cf13d5bb
Add Allocate macro
author | innparusu |
---|---|
date | Wed, 02 Mar 2016 19:23:00 +0900 |
parents | 9e139a340bd1 |
children | f57e9ffa7960 |
line wrap: on
line source
#include <string.h> #include "stack.h" 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; }