blob: ef79f5bd61ff78c82abceefdb9bd6c22b6f1fcd1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
#ifndef _SHD_VPLIST_H_
#define _SHD_VPLIST_H_
#include <stdio.h>
#include <assert.h>
struct vplist {
size_t head;
size_t tail;
size_t allocated;
void **l;
};
struct vplist *vplist_create(size_t initial_length);
void vplist_flush(struct vplist *v);
void vplist_free(struct vplist *v);
void vplist_grow(struct vplist *v);
void *vplist_pop_head(struct vplist *v);
void *vplist_pop_tail(struct vplist *v);
static inline void vplist_append(struct vplist *v, void *item)
{
if (v->tail == v->allocated)
vplist_grow(v);
v->l[v->tail++] = item;
}
static inline void *vplist_get(struct vplist *v, size_t i)
{
assert(i < (v->tail - v->head));
return v->l[v->head + i];
}
static inline size_t vplist_len(struct vplist *v)
{
return v->tail - v->head;
}
#endif
|