blob: 810e663862664800d5c869edd9b3a77930472533 (
plain) (
blame)
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
45
46
47
48
49
|
#ifndef VEC_H
#define VEC_H
#include <stddef.h>
#include <assert.h>
#include <stdlib.h>
typedef any {};
typedef vec[any type]() {
struct <> {
size_t n;
size_t s;
type *buf;
};
static inline struct <> <>create()
{
return (struct <>){
.n = 0,
.s = 0,
.buf = NULL
};
}
static inline void <>append(struct <> *v, type n)
{
v->n++;
if (v->n > v->s) {
v->s = v->s == 0 ? 1 : 2 * v->s;
v->buf = realloc(v->buf, v->s * sizeof(type));
}
v->buf[v->n - 1] = n;
}
static inline type *<>at(struct <> *v, size_t i)
{
assert(i < v->n);
return &v->buf[i];
}
static inline void <>destroy(struct <> *v)
{
free(v->buf);
}
}
#endif /* VEC_H */
|