1#ifndef __MC_MACRO_HPP__
2#define __MC_MACRO_HPP__
4#define CHECK_MODEL(name) \
5 static_assert(ModelType<name>, #name); \
6 static_assert(FloatingPointType<name::FloatType>, " floatl" #name);
8#define MODEL_CONSTANT static constexpr
11#define INDEX_FROM_ENUM(e) static_cast<std::size_t>((e))
14#define CHECK_BOUND(__index__, __array_name__) \
15 static_assert(INDEX_FROM_ENUM(__index__) < __array_name__.static_extent(1), \
16 "Index out of model bound");
18#define GET_PROPERTY_FROM_IDX(__index__, __array_name__, __idx__) \
19 __array_name__(__index__, __idx__)
22#define GET_PROPERTY_FROM(__index__, __array_name__, enum_name) \
23 GET_PROPERTY_FROM_IDX(__index__, __array_name__, INDEX_FROM_ENUM(enum_name))
25#define GET_PROPERTY(enum_name) GET_PROPERTY_FROM(idx, arr, enum_name)
27#define COPY_PROPERTY_TO(enum_name, __index__, __array_name__) \
28 GET_PROPERTY_FROM(__index__, __array_name__, enum_name) \
29 = GET_PROPERTY(enum_name);
31#define GET_INDEX(size) \
32 std::size_t idx = (team_handle.league_rank() * team_handle.team_size()) \
33 + team_handle.team_rank(); \