#include <farm_pp/preprocessor/comparison/equal.hpp>
#include <farm_pp/preprocessor/control/if.hpp>
#include <farm_pp/preprocessor/punctuation/remove_parens.hpp>
#include <farm_pp/preprocessor/seq/for_each.hpp>
#include <farm_pp/preprocessor/seq/for_each_i.hpp>
#include <farm_pp/preprocessor/seq/pop_front.hpp>
#include <farm_pp/preprocessor/stringize.hpp>
#include <farm_pp/preprocessor/tuple/elem.hpp>
#include <farm_pp/preprocessor/tuple/size.hpp>
#include <farm_pp/preprocessor/tuple/to_seq.hpp>
#include <array>
#include <string>
#include <string_view>
Go to the source code of this file.
|
#define | FARM_ENUM_DETAILS_OP_MAKE_TUPLE(dummy1, dummy2, ENUM) ((FARM_PP_REMOVE_PARENS(ENUM))) |
|
#define | FARM_ENUM_DETAILS_TO_SEQ_OF_TUPLES(...) |
|
#define | FARM_ENUM_DETAILS_GET_INT_TYPE(...) |
|
#define | FARM_ENUM_DETAILS_GET_VARS(...) |
|
#define | FARM_ENUM_DETAILS_OP_VALUE_WITH_INIT(PAIR) |
|
#define | FARM_ENUM_DETAILS_ENUM_NS_OP(NAME, PAIR) NAME##Impl::FARM_PP_TUPLE_ELEM(0, PAIR) |
|
#define | FARM_ENUM_DETAILS_OP_COMMA_VALUE(dummy1, dummy2, PAIR) , FARM_ENUM_DETAILS_OP_VALUE_WITH_INIT(PAIR) |
|
#define | FARM_ENUM_DETAILS_NS_OP_COMMA(dummy1, NAME, PAIR) , FARM_ENUM_DETAILS_ENUM_NS_OP(NAME, PAIR) |
|
#define | FARM_ENUM_DETAILS_CSV(...) |
|
#define | FARM_ENUM_NS_ENUM_CSV(NAME, ...) |
|
#define | FARM_ENUM_DETAILS_OP_TO_STRING_CASE(dummy1, TYPE, PAIR) |
|
#define | FARM_ENUM_DETAILS_OP_TO_PRETTY_CASE(dummy, types, PAIR) |
|
#define | FARM_ENUM_DETAILS_OP_SET_VALUE_CASES(dummy1, TYPE, PAIR) |
|
#define | FARM_ENUM_DETAILS_OP_COMMA_STRING(dummy1, dummy2, PAIR) , FARM_PP_STRINGIZE(FARM_PP_TUPLE_ELEM(0, PAIR)) |
|
#define | FARM_ENUM_DETAILS_COMMA_SEP_STRINGS(...) |
|
#define | FARM_ENUM_DETAILS_OP_COMMA_VALUE_STRING(dummy1, dummy2, PAIR) ", " FARM_PP_STRINGIZE(FARM_PP_TUPLE_ELEM(0, PAIR)) |
|
#define | FARM_ENUM_DETAILS_OP_POSITION_ICASE(dummy, TYPE, I, PAIR) |
|
#define | FARM_ENUM_DETAILS_CSV_STRING(...) |
|
#define | FARM_ENUM_DETAILS_OP_INTS(dummy, TYPES, PAIR) |
|
#define | FARM_ENUM_DETAILS_COMMA_SEP_INTS(TYPE, INT_TYPE, ...) |
|
#define | FARM_ENUM_DEF_IMPL(NAME, ...) |
|
◆ FARM_ENUM_DEF_IMPL
#define FARM_ENUM_DEF_IMPL |
( |
|
NAME, |
|
|
|
... |
|
) |
| |
◆ FARM_ENUM_DETAILS_COMMA_SEP_INTS
#define FARM_ENUM_DETAILS_COMMA_SEP_INTS |
( |
|
TYPE, |
|
|
|
INT_TYPE, |
|
|
|
... |
|
) |
| |
Value: INT_TYPE(TYPE::FARM_PP_TUPLE_ELEM( \
0, \
FARM_PP_SEQ_FOR_EACH( \
(TYPE, INT_TYPE), \
◆ FARM_ENUM_DETAILS_COMMA_SEP_STRINGS
#define FARM_ENUM_DETAILS_COMMA_SEP_STRINGS |
( |
|
... | ) |
|
Value: FARM_PP_STRINGIZE(FARM_PP_TUPLE_ELEM( \
0, \
FARM_PP_SEQ_FOR_EACH( \
_, \
◆ FARM_ENUM_DETAILS_CSV
#define FARM_ENUM_DETAILS_CSV |
( |
|
... | ) |
|
Value:
FARM_PP_SEQ_FOR_EACH( \
_, \
◆ FARM_ENUM_DETAILS_CSV_STRING
#define FARM_ENUM_DETAILS_CSV_STRING |
( |
|
... | ) |
|
Value: FARM_PP_STRINGIZE(FARM_PP_TUPLE_ELEM( \
0, \
FARM_PP_SEQ_FOR_EACH( \
_, \
◆ FARM_ENUM_DETAILS_ENUM_NS_OP
#define FARM_ENUM_DETAILS_ENUM_NS_OP |
( |
|
NAME, |
|
|
|
PAIR |
|
) |
| NAME##Impl::FARM_PP_TUPLE_ELEM(0, PAIR) |
◆ FARM_ENUM_DETAILS_GET_INT_TYPE
#define FARM_ENUM_DETAILS_GET_INT_TYPE |
( |
|
... | ) |
|
Value: FARM_PP_IF( \
FARM_PP_EQUAL(FARM_PP_TUPLE_SIZE((__VA_ARGS__)), 2), \
FARM_PP_TUPLE_ELEM(0, (__VA_ARGS__)), \
int)
◆ FARM_ENUM_DETAILS_GET_VARS
#define FARM_ENUM_DETAILS_GET_VARS |
( |
|
... | ) |
|
Value: FARM_PP_REMOVE_PARENS(FARM_PP_IF( \
FARM_PP_EQUAL(FARM_PP_TUPLE_SIZE((__VA_ARGS__)), 2), \
(FARM_PP_TUPLE_ELEM(1, (__VA_ARGS__))), \
(__VA_ARGS__)))
◆ FARM_ENUM_DETAILS_NS_OP_COMMA
◆ FARM_ENUM_DETAILS_OP_COMMA_STRING
#define FARM_ENUM_DETAILS_OP_COMMA_STRING |
( |
|
dummy1, |
|
|
|
dummy2, |
|
|
|
PAIR |
|
) |
| , FARM_PP_STRINGIZE(FARM_PP_TUPLE_ELEM(0, PAIR)) |
◆ FARM_ENUM_DETAILS_OP_COMMA_VALUE
◆ FARM_ENUM_DETAILS_OP_COMMA_VALUE_STRING
#define FARM_ENUM_DETAILS_OP_COMMA_VALUE_STRING |
( |
|
dummy1, |
|
|
|
dummy2, |
|
|
|
PAIR |
|
) |
| ", " FARM_PP_STRINGIZE(FARM_PP_TUPLE_ELEM(0, PAIR)) |
◆ FARM_ENUM_DETAILS_OP_INTS
#define FARM_ENUM_DETAILS_OP_INTS |
( |
|
dummy, |
|
|
|
TYPES, |
|
|
|
PAIR |
|
) |
| |
Value: , FARM_PP_TUPLE_ELEM( \
1, TYPES)(FARM_PP_TUPLE_ELEM(0, TYPES)::FARM_PP_TUPLE_ELEM(0, PAIR))
◆ FARM_ENUM_DETAILS_OP_MAKE_TUPLE
#define FARM_ENUM_DETAILS_OP_MAKE_TUPLE |
( |
|
dummy1, |
|
|
|
dummy2, |
|
|
|
ENUM |
|
) |
| ((FARM_PP_REMOVE_PARENS(ENUM))) |
◆ FARM_ENUM_DETAILS_OP_POSITION_ICASE
#define FARM_ENUM_DETAILS_OP_POSITION_ICASE |
( |
|
dummy, |
|
|
|
TYPE, |
|
|
|
I, |
|
|
|
PAIR |
|
) |
| |
Value: case TYPE::FARM_PP_TUPLE_ELEM(0, PAIR): { \
return I; \
}
◆ FARM_ENUM_DETAILS_OP_SET_VALUE_CASES
#define FARM_ENUM_DETAILS_OP_SET_VALUE_CASES |
( |
|
dummy1, |
|
|
|
TYPE, |
|
|
|
PAIR |
|
) |
| |
Value: if (
str == FARM_PP_STRINGIZE(FARM_PP_TUPLE_ELEM(0, PAIR))) { \
value = TYPE::FARM_PP_TUPLE_ELEM(0, PAIR); \
return true; \
}
◆ FARM_ENUM_DETAILS_OP_TO_PRETTY_CASE
#define FARM_ENUM_DETAILS_OP_TO_PRETTY_CASE |
( |
|
dummy, |
|
|
|
types, |
|
|
|
PAIR |
|
) |
| |
Value: case FARM_PP_TUPLE_ELEM(0, types)::FARM_PP_TUPLE_ELEM(0, PAIR): { \
return FARM_PP_STRINGIZE(FARM_PP_TUPLE_ELEM(0, PAIR)) + \
std::string(" (=") + \
std::to_string(FARM_PP_TUPLE_ELEM(1, types)(value)) + \
std::string(")"); \
}
◆ FARM_ENUM_DETAILS_OP_TO_STRING_CASE
#define FARM_ENUM_DETAILS_OP_TO_STRING_CASE |
( |
|
dummy1, |
|
|
|
TYPE, |
|
|
|
PAIR |
|
) |
| |
Value: case TYPE::FARM_PP_TUPLE_ELEM(0, PAIR): { \
return FARM_PP_STRINGIZE(FARM_PP_TUPLE_ELEM(0, PAIR)); \
}
◆ FARM_ENUM_DETAILS_OP_VALUE_WITH_INIT
#define FARM_ENUM_DETAILS_OP_VALUE_WITH_INIT |
( |
|
PAIR | ) |
|
Value: FARM_PP_IF( \
FARM_PP_EQUAL(FARM_PP_TUPLE_SIZE(PAIR), 1), \
FARM_PP_TUPLE_ELEM(0, PAIR), \
FARM_PP_TUPLE_ELEM(0, PAIR) = FARM_PP_TUPLE_ELEM(1, PAIR))
◆ FARM_ENUM_DETAILS_TO_SEQ_OF_TUPLES
#define FARM_ENUM_DETAILS_TO_SEQ_OF_TUPLES |
( |
|
... | ) |
|
◆ FARM_ENUM_NS_ENUM_CSV
#define FARM_ENUM_NS_ENUM_CSV |
( |
|
NAME, |
|
|
|
... |
|
) |
| |
Value:
NAME, \
FARM_PP_SEQ_FOR_EACH( \
NAME, \