mirror of
https://github.com/etaHEN/etaHEN.git
synced 2026-01-12 19:25:33 +08:00
27 lines
1.2 KiB
C
27 lines
1.2 KiB
C
#ifndef __SPARSE_H__
|
|
#define __SPARSE_H__
|
|
#pragma once
|
|
|
|
#define JOIN_HELPER(x, y) x##y
|
|
#define JOIN(x, y) JOIN_HELPER(x, y)
|
|
|
|
#define TYPE_PAD(size) char JOIN(_pad_, __COUNTER__)[size]
|
|
#define TYPE_VARIADIC_BEGIN(name) name { union {
|
|
#define TYPE_BEGIN(name, size) name { union { TYPE_PAD(size)
|
|
#define TYPE_END(...) }; } __VA_ARGS__
|
|
#define TYPE_FIELD(field, offset) struct { TYPE_PAD(offset); field; }
|
|
|
|
#define TYPE_CHECK_SIZE(name, size) \
|
|
_Static_assert(sizeof(name) == (size), "Size of " #name " != " #size)
|
|
|
|
#define TYPE_CHECK_FIELD_OFFSET(name, member, offset) \
|
|
_Static_assert(offsetof(name, member) == (offset), "Offset of " #name "." #member " != " #offset)
|
|
|
|
#define TYPE_CHECK_FIELD_SIZE(name, member, size) \
|
|
_Static_assert(sizeof(((name*)0)->member) == (size), "Size of " #name "." #member " != " #size)
|
|
|
|
#define COUNT_OF(x) ((sizeof(x)/sizeof(0[x])) / ((size_t)(!(sizeof(x) % sizeof(0[x])))))
|
|
|
|
#define KCALL_REL32(k, src, dest) do { *(uint32_t *)(k + src + 1) = (dest - src - k - 5); } while(0);
|
|
|
|
#endif |