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_ */ |