Simplify array and ring_buffer creation.

This commit is contained in:
Enrico Fraccaroli (Galfurian)
2022-01-27 15:06:58 -05:00
parent bef162cd24
commit 5c75019ddd
2 changed files with 70 additions and 111 deletions
+23 -30
View File
@@ -6,35 +6,28 @@
#pragma once
#ifdef __KERNEL__
#define DECLARE_ARRAY(type, name) \
typedef struct arr_##name##_t { \
const unsigned size; \
type *buffer; \
} arr_##name##_t; \
arr_##name##_t alloc_arr_##name(unsigned len) \
{ \
arr_##name##_t a = { len, len > 0 ? kmalloc(sizeof(type) * len) : NULL }; \
memset(a.buffer, 0, sizeof(type) * len); \
return a; \
} \
static inline void free_arr_##name(arr_##name##_t *arr) \
{ \
kfree(arr->buffer); \
}
#define ARRAY_ALLOC kmalloc
#define ARRAY_FREE kfree
#else
#define DECLARE_ARRAY(type, name) \
typedef struct arr_##name##_t { \
const unsigned size; \
type *buffer; \
} arr_##name##_t; \
arr_##name##_t alloc_arr_##name(unsigned len) \
{ \
arr_##name##_t a = { len, len > 0 ? malloc(sizeof(type) * len) : NULL }; \
memset(a.buffer, 0, sizeof(type) * len); \
return a; \
} \
static inline void free_arr_##name(arr_##name##_t *arr) \
{ \
free(arr->buffer); \
#define ARRAY_ALLOC malloc
#define ARRAY_FREE free
#endif
#define DECLARE_ARRAY(type, name) \
typedef struct arr_##name##_t { \
const unsigned size; \
type *buffer; \
} arr_##name##_t; \
arr_##name##_t alloc_arr_##name(unsigned len) \
{ \
arr_##name##_t a = { len, len > 0 ? ARRAY_ALLOC(sizeof(type) * len) : NULL }; \
memset(a.buffer, 0, sizeof(type) * len); \
return a; \
} \
static inline void free_arr_##name(arr_##name##_t *arr) \
{ \
ARRAY_FREE(arr->buffer); \
}
#endif
#undef ARRAY_ALLOC malloc
#undef ARRAY_FREE free