Branch data Line data Source code
1 : : #include "vstack.h" 2 : : 3 : : #include <stdlib.h> 4 : : #include <assert.h> 5 : : 6 : : //#define DEBUG 7 : : #include "debug.h" 8 : : 9 : : struct __vstack_t 10 : : { 11 : : cmph_uint32 pointer; 12 : : cmph_uint32 *values; 13 : : cmph_uint32 capacity; 14 : : }; 15 : : 16 : 0 : vstack_t *vstack_new(void) 17 : : { 18 : 0 : vstack_t *stack = (vstack_t *)malloc(sizeof(vstack_t)); 19 [ # # ]: 0 : assert(stack); 20 : 0 : stack->pointer = 0; 21 : 0 : stack->values = NULL; 22 : 0 : stack->capacity = 0; 23 : 0 : return stack; 24 : : } 25 : : 26 : 0 : void vstack_destroy(vstack_t *stack) 27 : : { 28 [ # # ]: 0 : assert(stack); 29 : 0 : free(stack->values); 30 : 0 : free(stack); 31 : 0 : } 32 : : 33 : 0 : void vstack_push(vstack_t *stack, cmph_uint32 val) 34 : : { 35 [ # # ]: 0 : assert(stack); 36 : 0 : vstack_reserve(stack, stack->pointer + 1); 37 : 0 : stack->values[stack->pointer] = val; 38 : 0 : ++(stack->pointer); 39 : 0 : } 40 : 0 : void vstack_pop(vstack_t *stack) 41 : : { 42 [ # # ]: 0 : assert(stack); 43 [ # # ]: 0 : assert(stack->pointer > 0); 44 : 0 : --(stack->pointer); 45 : 0 : } 46 : : 47 : 0 : cmph_uint32 vstack_top(vstack_t *stack) 48 : : { 49 [ # # ]: 0 : assert(stack); 50 [ # # ]: 0 : assert(stack->pointer > 0); 51 : 0 : return stack->values[(stack->pointer - 1)]; 52 : : } 53 : 0 : int vstack_empty(vstack_t *stack) 54 : : { 55 [ # # ]: 0 : assert(stack); 56 : 0 : return stack->pointer == 0; 57 : : } 58 : 0 : cmph_uint32 vstack_size(vstack_t *stack) 59 : : { 60 : 0 : return stack->pointer; 61 : : } 62 : 0 : void vstack_reserve(vstack_t *stack, cmph_uint32 size) 63 : : { 64 [ # # ]: 0 : assert(stack); 65 [ # # ]: 0 : if (stack->capacity < size) 66 : : { 67 : 0 : cmph_uint32 new_capacity = stack->capacity + 1; 68 : : DEBUGP("Increasing current capacity %u to %u\n", stack->capacity, size); 69 [ # # ]: 0 : while (new_capacity < size) 70 : : { 71 : 0 : new_capacity *= 2; 72 : : } 73 : 0 : stack->values = (cmph_uint32 *)realloc(stack->values, sizeof(cmph_uint32)*new_capacity); 74 [ # # ]: 0 : assert(stack->values); 75 : 0 : stack->capacity = new_capacity; 76 : : DEBUGP("Increased\n"); 77 : : } 78 : 0 : } 79 : :