]> git.sesse.net Git - casparcg/blob - common/enum_class.h
2.1.0: More refactoring.
[casparcg] / common / enum_class.h
1 #pragma once\r
2 \r
3 namespace caspar {\r
4 \r
5 template<typename def, typename inner = typename def::type>\r
6 class enum_class : public def\r
7 {\r
8         typedef typename def::type type;\r
9         inner val_; \r
10 public: \r
11         explicit enum_class(int v) : val_(static_cast<type>(v)) {}\r
12         enum_class(type v) : val_(v) {}\r
13         inner value() const { return val_; }\r
14  \r
15         bool operator==(const enum_class& s) const { return val_ == s.val_; }\r
16         bool operator!=(const enum_class& s) const { return val_ != s.val_; }\r
17         bool operator<(const enum_class& s) const { return val_ <  s.val_; }\r
18         bool operator<=(const enum_class& s) const { return val_ <= s.val_; }\r
19         bool operator>(const enum_class& s) const { return val_ >  s.val_; }\r
20         bool operator>=(const enum_class& s) const { return val_ >= s.val_; }\r
21 \r
22         enum_class operator&(const enum_class& s) const\r
23         {\r
24                 return enum_class(static_cast<type>(val_ & s.val_));\r
25         }\r
26 \r
27         enum_class operator|(const enum_class& s) const\r
28         {\r
29                 return enum_class(static_cast<type>(val_ | s.val_));\r
30         }\r
31 \r
32         //operator inner()\r
33         //{\r
34         //      return val_;\r
35         //}\r
36 };\r
37 \r
38 }