X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/08e7455d67920bbd7a87f440d00f2c1e071314a0..609b277351c837356a7b284127eed888eca3620d:/include/xbt/utility.hpp diff --git a/include/xbt/utility.hpp b/include/xbt/utility.hpp index 2a1541ac8a..cab7266e0f 100644 --- a/include/xbt/utility.hpp +++ b/include/xbt/utility.hpp @@ -7,8 +7,24 @@ #ifndef XBT_UTILITY_HPP #define XBT_UTILITY_HPP -#include +#include #include +#include +#include + +/** @brief Helper macro to declare enum class + * + * Declares an enum class EnumType, and a function "const char* to_c_str(EnumType)" to retrieve a C-string description + * for each value. + */ +#define XBT_DECLARE_ENUM_CLASS(EnumType, ...) \ + enum class EnumType; \ + static constexpr char const* to_c_str(EnumType value) \ + { \ + constexpr std::array names{{_XBT_STRINGIFY_ARGS(__VA_ARGS__)}}; \ + return names[static_cast(value)]; \ + } \ + enum class EnumType { __VA_ARGS__ } /* defined here to handle trailing semicolon */ namespace simgrid { namespace xbt {