#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>
#include <type_traits>
Go to the source code of this file.
 | 
| #define  | FARM_ENUMFLAGS_DETAILS_OP_INIT_FLAG(dummy1,  dummy2,  I,  FLAG)   , FLAG = (1 << (I + 1)) | 
|   | 
| #define  | FARM_ENUMFLAGS_DETAILS_FLAG_DEFINITIONS(...) | 
|   | 
| #define  | FARM_ENUMFLAG_DETAILS_OP_SET_ENUM_FROM_STRING(dummy1,  TYPE,  FLAG) | 
|   | 
| #define  | FARM_ENUMFLAG_DETAILS_OP_SINGLE_FLAG_CHECK(dummy1,  TYPE,  FLAG) | 
|   | 
| #define  | FARM_ENUMFLAG_DETAILS_OP_PUSHBACK_STRING(dummy1,  TYPE,  FLAG) | 
|   | 
| #define  | FARM_ENUMFLAG_DETAILS_OP_STRING_FOR_FLAG(dummy1,  TYPE,  FLAG) | 
|   | 
| #define  | FARM_ENUMFLAGS_DETAILS_OP_COMMA_STRING(dummy1,  dummy2,  STRING)   , FARM_PP_STRINGIZE(STRING) | 
|   | 
| #define  | FARM_ENUMFLAGS_DETAILS_COMMA_SEP_STRINGS(...) | 
|   | 
| #define  | FARM_ENUMFLAGS_DETAILS_OP_COMMA_VALUE_STRING(dummy1,  dummy2,  STRING)   ", " FARM_PP_STRINGIZE(STRING) | 
|   | 
| #define  | FARM_ENUMFLAGS_DETAILS_CSV_STRING(...) | 
|   | 
| #define  | FARM_ENUMFLAGS_DETAILS_OP_COMMA_INT(dummy1,  TYPE,  VAL)   , uint64_t(TYPE::VAL) | 
|   | 
| #define  | FARM_ENUMFLAGS_DETAILS_COMMA_SEP_INTS(TYPE, ...) | 
|   | 
| #define  | FARM_ENUMFLAGS_DEF_IMPL(NAME,  UINT_TYPE, ...) | 
|   | 
◆ FARM_ENUMFLAG_DETAILS_OP_PUSHBACK_STRING
      
        
          | #define FARM_ENUMFLAG_DETAILS_OP_PUSHBACK_STRING | 
          ( | 
            | 
          dummy1,  | 
        
        
           | 
           | 
            | 
          TYPE,  | 
        
        
           | 
           | 
            | 
          FLAG  | 
        
        
           | 
          ) | 
           |  | 
        
      
 
Value:  if (hasMask(value, TYPE::FLAG)) {                                  \
    strings.push_back(FARM_PP_STRINGIZE(FLAG));                      \
  }
 
 
 
◆ FARM_ENUMFLAG_DETAILS_OP_SET_ENUM_FROM_STRING
      
        
          | #define FARM_ENUMFLAG_DETAILS_OP_SET_ENUM_FROM_STRING | 
          ( | 
            | 
          dummy1,  | 
        
        
           | 
           | 
            | 
          TYPE,  | 
        
        
           | 
           | 
            | 
          FLAG  | 
        
        
           | 
          ) | 
           |  | 
        
      
 
Value:  if (
str == FARM_PP_STRINGIZE(FLAG)) {                                   \
 
    value = value | TYPE::FLAG;                                           \
    return true;                                                          \
  }
 
 
 
◆ FARM_ENUMFLAG_DETAILS_OP_SINGLE_FLAG_CHECK
      
        
          | #define FARM_ENUMFLAG_DETAILS_OP_SINGLE_FLAG_CHECK | 
          ( | 
            | 
          dummy1,  | 
        
        
           | 
           | 
            | 
          TYPE,  | 
        
        
           | 
           | 
            | 
          FLAG  | 
        
        
           | 
          ) | 
           |  | 
        
      
 
Value:  case TYPE::FLAG: {                                                   \
    return true;                                                       \
  }
 
 
 
◆ FARM_ENUMFLAG_DETAILS_OP_STRING_FOR_FLAG
      
        
          | #define FARM_ENUMFLAG_DETAILS_OP_STRING_FOR_FLAG | 
          ( | 
            | 
          dummy1,  | 
        
        
           | 
           | 
            | 
          TYPE,  | 
        
        
           | 
           | 
            | 
          FLAG  | 
        
        
           | 
          ) | 
           |  | 
        
      
 
Value:  if (hasMask(value, TYPE::FLAG)) {                                            \
    prettySet +=                                                               \
        FARM_PP_STRINGIZE(FLAG) " (=" + std::to_string(uint64_t(TYPE::FLAG)) + \
        "), ";                                                                 \
  }
 
 
 
◆ FARM_ENUMFLAGS_DEF_IMPL
      
        
          | #define FARM_ENUMFLAGS_DEF_IMPL | 
          ( | 
            | 
          NAME,  | 
        
        
           | 
           | 
            | 
          UINT_TYPE,  | 
        
        
           | 
           | 
            | 
          ...  | 
        
        
           | 
          ) | 
           |  | 
        
      
 
 
◆ FARM_ENUMFLAGS_DETAILS_COMMA_SEP_INTS
      
        
          | #define FARM_ENUMFLAGS_DETAILS_COMMA_SEP_INTS | 
          ( | 
            | 
          TYPE,  | 
        
        
           | 
           | 
            | 
          ...  | 
        
        
           | 
          ) | 
           |  | 
        
      
 
Value:  uint64_t(TYPE::FARM_PP_TUPLE_ELEM(0, __VA_ARGS__)) FARM_PP_SEQ_FOR_EACH( \
      TYPE,                                                                \
      FARM_PP_SEQ_POP_FRONT(FARM_PP_TUPLE_TO_SEQ(__VA_ARGS__)))
 
 
 
◆ FARM_ENUMFLAGS_DETAILS_COMMA_SEP_STRINGS
      
        
          | #define FARM_ENUMFLAGS_DETAILS_COMMA_SEP_STRINGS | 
          ( | 
            | 
          ... | ) | 
           | 
        
      
 
Value:  FARM_PP_STRINGIZE(FARM_PP_TUPLE_ELEM(0, __VA_ARGS__)) \
  FARM_PP_SEQ_FOR_EACH(                                 \
      _,                                                \
      FARM_PP_SEQ_POP_FRONT(FARM_PP_TUPLE_TO_SEQ(__VA_ARGS__)))
 
 
 
◆ FARM_ENUMFLAGS_DETAILS_CSV_STRING
      
        
          | #define FARM_ENUMFLAGS_DETAILS_CSV_STRING | 
          ( | 
            | 
          ... | ) | 
           | 
        
      
 
Value:  FARM_PP_STRINGIZE(FARM_PP_TUPLE_ELEM(0, __VA_ARGS__)) \
  FARM_PP_SEQ_FOR_EACH(                                 \
      _,                                                \
      FARM_PP_SEQ_POP_FRONT(FARM_PP_TUPLE_TO_SEQ(__VA_ARGS__)))
 
 
 
◆ FARM_ENUMFLAGS_DETAILS_FLAG_DEFINITIONS
      
        
          | #define FARM_ENUMFLAGS_DETAILS_FLAG_DEFINITIONS | 
          ( | 
            | 
          ... | ) | 
           | 
        
      
 
Value:  FARM_PP_TUPLE_ELEM(0, __VA_ARGS__) = 1 FARM_PP_SEQ_FOR_EACH_I( \
      _,                                                         \
      FARM_PP_SEQ_POP_FRONT(FARM_PP_TUPLE_TO_SEQ(__VA_ARGS__)))
 
 
 
◆ FARM_ENUMFLAGS_DETAILS_OP_COMMA_INT
      
        
          | #define FARM_ENUMFLAGS_DETAILS_OP_COMMA_INT | 
          ( | 
            | 
          dummy1,  | 
        
        
           | 
           | 
            | 
          TYPE,  | 
        
        
           | 
           | 
            | 
          VAL  | 
        
        
           | 
          ) | 
           |    , uint64_t(TYPE::VAL) | 
        
      
 
 
◆ FARM_ENUMFLAGS_DETAILS_OP_COMMA_STRING
      
        
          | #define FARM_ENUMFLAGS_DETAILS_OP_COMMA_STRING | 
          ( | 
            | 
          dummy1,  | 
        
        
           | 
           | 
            | 
          dummy2,  | 
        
        
           | 
           | 
            | 
          STRING  | 
        
        
           | 
          ) | 
           |    , FARM_PP_STRINGIZE(STRING) | 
        
      
 
 
◆ FARM_ENUMFLAGS_DETAILS_OP_COMMA_VALUE_STRING
      
        
          | #define FARM_ENUMFLAGS_DETAILS_OP_COMMA_VALUE_STRING | 
          ( | 
            | 
          dummy1,  | 
        
        
           | 
           | 
            | 
          dummy2,  | 
        
        
           | 
           | 
            | 
          STRING  | 
        
        
           | 
          ) | 
           |    ", " FARM_PP_STRINGIZE(STRING) | 
        
      
 
 
◆ FARM_ENUMFLAGS_DETAILS_OP_INIT_FLAG
      
        
          | #define FARM_ENUMFLAGS_DETAILS_OP_INIT_FLAG | 
          ( | 
            | 
          dummy1,  | 
        
        
           | 
           | 
            | 
          dummy2,  | 
        
        
           | 
           | 
            | 
          I,  | 
        
        
           | 
           | 
            | 
          FLAG  | 
        
        
           | 
          ) | 
           |    , FLAG = (1 << (I + 1)) |