mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 11:37:35 +00:00
fa20edc44d
- Remove most __ASSEMBLER__ __LINKER__ ifdefs - Rename libc/intrin/bits.h to libc/serialize.h - Block pthread cancelation in fchmodat() polyfill - Remove `clang-format off` statements in third_party
28 lines
1.4 KiB
C
28 lines
1.4 KiB
C
#ifndef COSMOPOLITAN_LIBC_ALG_ARRAYLIST_H_
|
|
#define COSMOPOLITAN_LIBC_ALG_ARRAYLIST_H_
|
|
#include "libc/mem/internal.h"
|
|
#include "libc/str/str.h"
|
|
|
|
/* TODO(jart): DELETE */
|
|
|
|
#define append(ARRAYLIST, ITEM) concat((ARRAYLIST), (ITEM), 1)
|
|
|
|
#ifndef concat
|
|
#define concat(ARRAYLIST, ITEM, COUNT) \
|
|
({ \
|
|
autotype(ARRAYLIST) List = (ARRAYLIST); \
|
|
autotype(&List->p[0]) Item = (ITEM); \
|
|
size_t SizE = sizeof(*Item); \
|
|
size_t Count = (COUNT); \
|
|
size_t Idx = List->i; \
|
|
if (Idx + Count < List->n || __grow(&List->p, &List->n, SizE, Count)) { \
|
|
memcpy(&List->p[Idx], Item, SizE *Count); \
|
|
List->i = Idx + Count; \
|
|
} else { \
|
|
Idx = -1UL; \
|
|
} \
|
|
(ssize_t)(Idx); \
|
|
})
|
|
#endif /* concat */
|
|
|
|
#endif /* COSMOPOLITAN_LIBC_ALG_ARRAYLIST_H_ */
|