summaryrefslogtreecommitdiff
path: root/src/array.h
blob: e50ecd434af4c1f991c0d3def89237bf4ff7838e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// SPDX-FileCopyrightText: 2024 Lizzy Fleckenstein <lizzy@vlhl.dev>
//
// SPDX-License-Identifier: AGPL-3.0-or-later

#ifndef ARRAY_H
#define ARRAY_H

#include <stddef.h>
#include <string.h>
#include <stdlib.h>

#define len(X) (sizeof X / sizeof *X)
#define array(T) struct { size_t len; T *data; }
#define arraybuf(T) struct { size_t cap; size_t len; T *data; }

#define ARR_REMOVE(A, P) memmove((P), (P)+1, sizeof *(P) * (--(A).len - ((P) - (A).data)));
#define ARR_APPEND(A) (((A).cap == (A).len) \
	? (A).data = realloc((A).data, sizeof *(A).data * ((A).cap = (A).cap ? (A).cap * 2 : 1)) \
	: NULL, &((A).data)[(A).len++])
#define ARR_ITER(A, I) \
	for (typeof((A).data) (I) = (A).data; (size_t) ((I) - (A).data) < (A).len; (I)++)

#endif