aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/deprecated/enum_codegen/enum_codegen.h
blob: 49f723354d7881e31e8f17e5061a71d60db28d1a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#pragma once 
 
/// see enum_codegen_ut.cpp for examples 
 
#define ENUM_VALUE_GEN(name, value, ...) name = value, 
#define ENUM_VALUE_GEN_NO_VALUE(name, ...) name, 
 
#define ENUM_TO_STRING_IMPL_ITEM(name, ...) \
    case name:                              \
        return #name;
#define ENUM_LTLT_IMPL_ITEM(name, ...) \
    case name:                         \
        os << #name;                   \
        break;
 
#define ENUM_TO_STRING(type, MAP)                                            \
    static inline const char* ToCString(type value) {                        \
        switch (value) {                                                     \
            MAP(ENUM_TO_STRING_IMPL_ITEM)                                    \
            default:                                                         \
                return "UNKNOWN";                                            \
        }                                                                    \
    }                                                                        \
                                                                             \
    static inline IOutputStream& operator<<(IOutputStream& os, type value) { \
        switch (value) {                                                     \
            MAP(ENUM_LTLT_IMPL_ITEM)                                         \
            default:                                                         \
                os << int(value);                                            \
                break;                                                       \
        }                                                                    \
        return os;                                                           \
    }