BioCMAMC-ST
macros.hpp
1#ifndef __MC_MACRO_HPP__
2#define __MC_MACRO_HPP__
3
4#define CHECK_MODEL(name) \
5 static_assert(ModelType<name>, #name); \
6 static_assert(FloatingPointType<name::FloatType>, " floatl" #name);
7
8#define MODEL_CONSTANT static constexpr
9
10// Utility to get the index from an enum
11#define INDEX_FROM_ENUM(e) static_cast<std::size_t>((e))
12
13// Bounds checking macro using static_extent
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");
17
18// Main macro that uses bounds checking and array access
19#define GET_PROPERTY_FROM(__index__, __array_name__, enum_name) \
20 __array_name__(__index__, INDEX_FROM_ENUM(enum_name))
21
22#define GET_PROPERTY(enum_name) GET_PROPERTY_FROM(idx, arr, enum_name)
23
24#define GET_INDEX(size) \
25 std::size_t idx = team_handle.league_rank() * team_handle.team_size() + team_handle.team_rank(); \
26 if (idx >= (size)) \
27 { \
28 return; \
29 }
30
31#endif