File Coverage

src/xh_stack.h
Criterion Covered Total %
statement 3 6 50.0
branch 1 4 25.0
condition n/a
subroutine n/a
pod n/a
total 4 10 40.0


line stmt bran cond sub pod time code
1             #ifndef _XH_STACK_H_
2             #define _XH_STACK_H_
3              
4             #include "xh_config.h"
5             #include "xh_core.h"
6              
7             typedef struct {
8             void *elts;
9             size_t size;
10             size_t nelts;
11             size_t top;
12             } xh_stack_t;
13              
14             XH_INLINE void *
15 7           xh_stack_push(xh_stack_t *st)
16             {
17 7 50         if (st->top >= st->nelts) {
18 0           st->nelts *= 2;
19 0 0         if ((st->elts = realloc(st->elts, st->nelts * st->size)) == NULL) {
20 0           croak("Memory allocation error");
21             }
22             }
23 7           return (void *) (XH_CHAR_CAST st->elts + st->top++ * st->size);
24             }
25              
26             XH_INLINE void *
27             xh_stack_pop(xh_stack_t *st)
28             {
29             return st->top == 0 ? NULL : (void *) (XH_CHAR_CAST st->elts + --st->top * st->size);
30             }
31              
32             XH_INLINE xh_bool_t
33             xh_stack_empty(xh_stack_t *st)
34             {
35             return st->top == 0 ? TRUE : FALSE;
36             }
37              
38             void xh_stack_init(xh_stack_t *st, xh_uint_t nelts, size_t size);
39             void xh_stack_destroy(xh_stack_t *st);
40              
41             #endif /* _XH_STACK_H_ */