Lines Matching refs:stack

41 /* Simple stack storage mechanism (or simple List). */
45 * length but known at stack init time.
47 * Stack elements can be accessed via pointers (be careful, if stack
48 * moved while you point into stack you have problems)
50 * Pointers to stack elements passed in are copied.
52 * Since the stack can be inspected, it can be used for more than just
53 * a simple stack.
60 resize(Stack *stack)
67 HPROF_ASSERT(stack!=NULL);
68 HPROF_ASSERT(stack->elements!=NULL);
69 HPROF_ASSERT(stack->size>0);
70 HPROF_ASSERT(stack->elem_size>0);
71 HPROF_ASSERT(stack->incr_size>0);
72 old_size = stack->size;
73 old_elements = stack->elements;
74 if ( (stack->resizes % 10) && stack->incr_size < (old_size >> 2) ) {
75 stack->incr_size = old_size >> 2; /* 1/4 the old_size */
77 new_size = old_size + stack->incr_size;
78 new_elements = HPROF_MALLOC(new_size*stack->elem_size);
79 (void)memcpy(new_elements, old_elements, old_size*stack->elem_size);
80 stack->size = new_size;
81 stack->elements = new_elements;
83 stack->resizes++;
89 Stack *stack;
95 stack = (Stack*)HPROF_MALLOC((int)sizeof(Stack));
97 stack->size = init_size;
98 stack->incr_size = incr_size;
99 stack->elem_size = elem_size;
100 stack->count = 0;
101 stack->elements = elements;
102 stack->resizes = 0;
103 return stack;
107 stack_element(Stack *stack, int i)
109 HPROF_ASSERT(stack!=NULL);
110 HPROF_ASSERT(stack->elements!=NULL);
111 HPROF_ASSERT(stack->count>i);
113 return (void*)(((char*)stack->elements) + i * stack->elem_size);
117 stack_top(Stack *stack)
121 HPROF_ASSERT(stack!=NULL);
123 if ( stack->count > 0 ) {
124 element = stack_element(stack, (stack->count-1));
130 stack_depth(Stack *stack)
132 HPROF_ASSERT(stack!=NULL);
133 return stack->count;
137 stack_pop(Stack *stack)
141 element = stack_top(stack);
143 stack->count--;
149 stack_push(Stack *stack, void *element)
153 HPROF_ASSERT(stack!=NULL);
154 if ( stack->count >= stack->size ) {
155 resize(stack);
157 stack->count++;
158 top_element = stack_top(stack);
159 (void)memcpy(top_element, element, stack->elem_size);
163 stack_term(Stack *stack)
165 HPROF_ASSERT(stack!=NULL);
166 if ( stack->elements != NULL ) {
167 HPROF_FREE(stack->elements);
169 HPROF_FREE(stack);