VSM C++ SDK
Vehicle Specific Modules SDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
enum_set.h
Go to the documentation of this file.
1 // Copyright (c) 2018, Smart Projects Holdings Ltd
2 // All rights reserved.
3 // See LICENSE file for license details.
4 
8 #ifndef _UGCS_VSM_ENUM_SET_H_
9 #define _UGCS_VSM_ENUM_SET_H_
10 
11 #include <bitset>
12 
13 namespace ugcs {
14 namespace vsm {
15 
19 template<typename Enum_type>
20 class Enum_set {
21 public:
23  template<typename... Enum_types>
24  Enum_set(Enum_types... values)
25  {
26  Set_recursive(values...);
27  }
28 
30  void
31  Set(Enum_type value, bool present = true)
32  {
33  set.set(static_cast<uint32_t>(value), present);
34  }
35 
37  void
39  {
40  set.reset();
41  }
42 
44  bool
45  Is_set(Enum_type value) const
46  {
47  return set.test(static_cast<uint32_t>(value));
48  }
49 
51  bool
52  operator==(const Enum_set& other) const
53  {
54  return set == other.set;
55  }
56 
57 private:
59  template<typename... Enum_types>
60  void
61  Set_recursive(Enum_type value, Enum_types... values)
62  {
63  Set(value);
64  Set_recursive(values...);
65  }
66 
68  void
69  Set_recursive()
70  {
71  }
72 
74  std::bitset<static_cast<uint32_t>(Enum_type::LAST)> set;
75 };
76 
77 } /* namespace vsm */
78 } /* namespace ugcs */
79 
80 #endif /* _UGCS_VSM_ENUM_SET_H_ */
Enum_set(Enum_types...values)
Construct the set based on arbitrary set of values.
Definition: enum_set.h:24
bool operator==(const Enum_set &other) const
Equality operator.
Definition: enum_set.h:52
Convenient set of enum values.
Definition: enum_set.h:20
void Set(Enum_type value, bool present=true)
Set enum value presence to true or false.
Definition: enum_set.h:31
void Reset()
Reset state to empty.
Definition: enum_set.h:38
bool Is_set(Enum_type value) const
Check if enum value is present or not.
Definition: enum_set.h:45
T value
Stored value (in wire byte order).
Definition: endian.h:356