17#ifndef FORTRAN_COMMON_ENUM_CLASS_H_
18#define FORTRAN_COMMON_ENUM_CLASS_H_
25constexpr std::size_t CountEnumNames(
const char *p) {
32 }
else if (*p !=
' ') {
39template <std::
size_t ITEMS>
40constexpr std::array<std::string_view, ITEMS> EnumNames(
const char *p) {
41 std::array<std::string_view, ITEMS> result{
""};
43 const char *start{
nullptr};
45 if (*p ==
',' || *p ==
' ') {
48 std::string_view{start,
static_cast<std::size_t
>(p - start)};
56 result[at] = std::string_view{start,
static_cast<std::size_t
>(p - start)};
61#define ENUM_CLASS(NAME, ...) \
62 enum class NAME { __VA_ARGS__ }; \
63 [[maybe_unused]] static constexpr std::size_t NAME##_enumSize{ \
64 ::Fortran::common::CountEnumNames(#__VA_ARGS__)}; \
65 [[maybe_unused]] static inline std::string_view EnumToString(NAME e) { \
66 static const constexpr auto names{ \
67 ::Fortran::common::EnumNames<NAME##_enumSize>(#__VA_ARGS__)}; \
68 return names[static_cast<std::size_t>(e)]; \
Definition: bit-population-count.h:20