fix: don't rely on _Alignof (c11 feature)
This commit is contained in:
parent
cc7ef60be2
commit
270e219d2e
19
rtcore.h
19
rtcore.h
@ -141,6 +141,19 @@ typedef int32_t b32;
|
|||||||
#define force_inline inline
|
#define force_inline inline
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if __STDC_VERSION__ >= 201112L
|
||||||
|
/* C11 introduces _Alignof */
|
||||||
|
#define ALIGNOF(T) _Alignof(T)
|
||||||
|
#else
|
||||||
|
#if defined(__GNUC__) || defined(__clang__)
|
||||||
|
/* Use the compiler-specific keyword/operator */
|
||||||
|
#define ALIGNOF(T) __alignof__(T)
|
||||||
|
#else
|
||||||
|
/* Fallback to the portable C89/C99 trick */
|
||||||
|
#define ALIGNOF(T) offsetof(struct { char c; T member; }, member)
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Arena allocator */
|
/* Arena allocator */
|
||||||
typedef struct arena
|
typedef struct arena
|
||||||
{
|
{
|
||||||
@ -195,9 +208,9 @@ enum
|
|||||||
*/
|
*/
|
||||||
#define alloc(...) allocx(__VA_ARGS__, alloc4, alloc3, alloc2)(__VA_ARGS__)
|
#define alloc(...) allocx(__VA_ARGS__, alloc4, alloc3, alloc2)(__VA_ARGS__)
|
||||||
#define allocx(a, b, c, d, e, ...) e
|
#define allocx(a, b, c, d, e, ...) e
|
||||||
#define alloc2(a, t) (t *)ArenaAlloc(a, isizeof(t), _Alignof(t), 1, 0)
|
#define alloc2(a, t) (t *)ArenaAlloc(a, isizeof(t), ALIGNOF(t), 1, 0)
|
||||||
#define alloc3(a, t, n) (t *)ArenaAlloc(a, isizeof(t), _Alignof(t), n, 0)
|
#define alloc3(a, t, n) (t *)ArenaAlloc(a, isizeof(t), ALIGNOF(t), n, 0)
|
||||||
#define alloc4(a, t, n, f) (t *)ArenaAlloc(a, isizeof(t), _Alignof(t), n, f)
|
#define alloc4(a, t, n, f) (t *)ArenaAlloc(a, isizeof(t), ALIGNOF(t), n, f)
|
||||||
|
|
||||||
RTC_API void *ArenaAlloc(arena *a, isize size, isize align, isize n, int flags);
|
RTC_API void *ArenaAlloc(arena *a, isize size, isize align, isize n, int flags);
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user