5
5
namespace nautilus {
6
6
7
7
enum Color { BLUE, GREEN };
8
+ enum class LogLevel : uint8_t { LOG_NONE = 1 , LOG_FATAL_ERROR = 2 , LOG_ERROR = 3 , LOG_WARNING = 4 , LOG_INFO = 5 , LOG_DEBUG = 6 , LOG_TRACE = 7 };
9
+ template <typename EnumClass>
10
+ auto constexpr getLogLevel (const EnumClass value) {
11
+ return static_cast <std::underlying_type_t <EnumClass>>(value);
12
+ }
8
13
9
14
val<bool > handleEnum (val<Color> enumVal) {
10
15
return enumVal == Color::BLUE;
11
16
}
12
17
18
+ val<bool > handleEnumLogLevel (val<LogLevel> enumVal) {
19
+ return enumVal == getLogLevel (LogLevel::LOG_DEBUG) || enumVal == getLogLevel (LogLevel::LOG_INFO);
20
+ }
21
+
13
22
val<int32_t > isEnum (val<Color> enumVal) {
14
23
if (enumVal == Color::BLUE) {
15
24
return 1 ;
@@ -33,7 +42,38 @@ int32_t enumFunction(Color value) {
33
42
}
34
43
}
35
44
45
+ auto enumClassFunction (LogLevel level) {
46
+ switch (level) {
47
+
48
+ case LogLevel::LOG_NONE:
49
+ return 42 ;
50
+ break ;
51
+ case LogLevel::LOG_FATAL_ERROR:
52
+ return 42 ;
53
+ break ;
54
+ case LogLevel::LOG_ERROR:
55
+ return 42 ;
56
+ break ;
57
+ case LogLevel::LOG_WARNING:
58
+ return 42 ;
59
+ break ;
60
+ case LogLevel::LOG_INFO:
61
+ return 42 ;
62
+ break ;
63
+ case LogLevel::LOG_DEBUG:
64
+ return 42 ;
65
+ break ;
66
+ case LogLevel::LOG_TRACE:
67
+ return 42 ;
68
+ break ;
69
+ }
70
+ }
71
+
36
72
val<int32_t > callEnumFunction (val<Color> enumVal) {
37
73
return invoke (enumFunction, enumVal);
38
74
}
75
+
76
+ val<int32_t > callEnumClassFunction (val<LogLevel> enumClassVal) {
77
+ return invoke (enumClassFunction, enumClassVal);
78
+ }
39
79
} // namespace nautilus
0 commit comments