Xonotic
struct.qh
Go to the documentation of this file.
1 #pragma once
2 
3 #ifndef QCC_SUPPORT_STRUCT
4  #define _STRUCT_DECLARE(x, id, type, END) noref type x##_##id;
5  #define STRUCT_DECLARE(id, s) s(_STRUCT_DECLARE, id)
6 
7  #define _STRUCT_PARAM_(x, id, type) type x##_##id,
8  #define _STRUCT_PARAM_END(x, id, type) type x##_##id
9  #define _STRUCT_PARAM(x, id, type, isend) _STRUCT_PARAM_##isend(x, id, type)
10  #define STRUCT_PARAM(id, s) s(_STRUCT_PARAM, id)
11 
12  #define _STRUCT_PASS_(x, id, type) x##_##id,
13  #define _STRUCT_PASS_END(x, id, type) x##_##id
14  #define _STRUCT_PASS(x, id, type, END) _STRUCT_PASS_##END(x, id, type)
15  #define STRUCT_PASS(id, s) s(_STRUCT_PASS, id)
16 
17  #define _STRUCT_STORE_DST(_, it) it
18  #define _STRUCT_STORE_SRC(it, _) it
19  #define _CONCAT3_(a, b, c) a##b##c
20  #define _CONCAT3(a, b, c) _CONCAT3_(a, b, c)
21  #define _STRUCT_STORE(x, id, type, END) _CONCAT3(_STRUCT_STORE_DST x, _, id) = _CONCAT3(_STRUCT_STORE_SRC x, _, id);
22  #define STRUCT_STORE(from, to, s) s(_STRUCT_STORE, (from, to))
23 
24  #define STRUCT(id, ...)
25 #else
26  #define STRUCT_DECLARE(id, type) type id;
27  #define STRUCT_PARAM(id, type) type id
28  #define STRUCT_PASS(id, type) id
29  #define STRUCT_STORE(from, to, s) to = from
30  #define _STRUCT_MEMBER(my, id, type, END) type id;
31  #define STRUCT(id, s) struct STRUCT_##id { s(_STRUCT_MEMBER, ) };
32 #endif