// SPDX-FileCopyrightText: 2024 Lizzy Fleckenstein // // SPDX-License-Identifier: AGPL-3.0-or-later #ifndef ARRAY_H #define ARRAY_H #include #include #include #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++]) #endif