]> git.sesse.net Git - casparcg/blob - common/enum_class.h
Misc modifications to fix problems found by static code analysis and some simplificat...
[casparcg] / common / enum_class.h
1 #pragma once
2
3 namespace caspar {
4
5 template<typename def, typename inner = typename def::type>
6 class enum_class : public def
7 {
8         typedef typename def::type type;
9         inner val_; 
10 public: 
11         explicit enum_class(int v) : val_(static_cast<type>(v)) {}
12         enum_class(type v) : val_(v) {}
13         inner value() const { return val_; }
14  
15         bool operator==(const enum_class& s) const      { return val_ == s.val_; }
16         bool operator!=(const enum_class& s) const      { return val_ != s.val_; }
17         bool operator<(const enum_class& s) const       { return val_ <  s.val_; }
18         bool operator<=(const enum_class& s) const      { return val_ <= s.val_; }
19         bool operator>(const enum_class& s) const       { return val_ >  s.val_; }
20         bool operator>=(const enum_class& s) const      { return val_ >= s.val_; }
21                 
22         bool operator==(const int& val) const   { return val_ == val; }
23         bool operator!=(const int& val) const   { return val_ != val; }
24         bool operator<(const int& val) const    { return val_ <  val; }
25         bool operator<=(const int& val) const   { return val_ <= val; }
26         bool operator>(const int& val) const    { return val_ >  val; }
27         bool operator>=(const int& val) const   { return val_ >= val; }
28
29         enum_class operator&(const enum_class& s) const
30         {
31                 return enum_class(static_cast<type>(val_ & s.val_));
32         }
33
34         enum_class& operator&=(const enum_class& s)
35         {
36                 val_ = static_cast<type>(val_ & s.val_);
37                 return *this;
38         }
39
40         enum_class operator|(const enum_class& s) const
41         {
42                 return enum_class(static_cast<type>(val_ | s.val_));
43         }
44         
45         enum_class& operator|=(const enum_class& s)
46         {
47                 val_ = static_cast<type>(val_ | s.val_);
48                 return *this;
49         }
50
51         //operator inner()
52         //{
53         //      return val_;
54         //}
55 };
56
57 }