bcachefs: CLASS(darray)

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
Kent Overstreet 2025-05-29 19:13:42 -04:00
parent 237a8e16bd
commit 42359f1615

View File

@ -8,6 +8,7 @@
* Inspired by CCAN's darray
*/
#include <linux/cleanup.h>
#include <linux/slab.h>
#define DARRAY_PREALLOCATED(_type, _nr) \
@ -112,6 +113,8 @@ int __bch2_darray_resize_noprof(darray_char *, size_t, size_t, gfp_t);
#define darray_for_each_reverse(_d, _i) \
for (typeof(&(_d).data[0]) _i = (_d).data + (_d).nr - 1; _i >= (_d).data && (_d).nr; --_i)
/* Init/exit */
#define darray_init(_d) \
do { \
(_d)->nr = 0; \
@ -127,4 +130,29 @@ do { \
darray_init(_d); \
} while (0)
#define DEFINE_DARRAY_CLASS(_type) \
DEFINE_CLASS(_type, _type, darray_exit(&(_T)), (_type) {}, void)
#define DEFINE_DARRAY(_type) \
typedef DARRAY(_type) darray_##_type; \
DEFINE_DARRAY_CLASS(darray_##_type)
#define DEFINE_DARRAY_NAMED(_name, _type) \
typedef DARRAY(_type) _name; \
DEFINE_DARRAY_CLASS(_name)
DEFINE_DARRAY_CLASS(darray_char);
DEFINE_DARRAY_CLASS(darray_str)
DEFINE_DARRAY_CLASS(darray_const_str)
DEFINE_DARRAY_CLASS(darray_u8)
DEFINE_DARRAY_CLASS(darray_u16)
DEFINE_DARRAY_CLASS(darray_u32)
DEFINE_DARRAY_CLASS(darray_u64)
DEFINE_DARRAY_CLASS(darray_s8)
DEFINE_DARRAY_CLASS(darray_s16)
DEFINE_DARRAY_CLASS(darray_s32)
DEFINE_DARRAY_CLASS(darray_s64)
#endif /* _BCACHEFS_DARRAY_H */