VSM C++ SDK
Vehicle Specific Modules SDK
enum_set.h
Go to the documentation of this file.
1 // Copyright (c) 2014, Smart Projects Holdings Ltd
2 // All rights reserved.
3 // See LICENSE file for license details.
4 
8 #ifndef _ENUM_SET_H_
9 #define _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:
22 
24  template<typename... Enum_types>
25  Enum_set(Enum_types... values)
26  {
27  Set_recursive(values...);
28  }
29 
31  void
32  Set(Enum_type value, bool present = true)
33  {
34  set.set(static_cast<long>(value), present);
35  }
36 
38  void
40  {
41  set.reset();
42  }
43 
45  bool
46  Is_set(Enum_type value) const
47  {
48  return set.test(static_cast<long>(value));
49  }
50 
52  bool
53  operator==(const Enum_set& other) const
54  {
55  return set == other.set;
56  }
57 
58 private:
59 
61  template<typename... Enum_types>
62  void
63  Set_recursive(Enum_type value, Enum_types... values)
64  {
65  Set(value);
66  Set_recursive(values...);
67  }
68 
70  void
71  Set_recursive()
72  {
73 
74  }
75 
77  std::bitset<static_cast<long>(Enum_type::LAST)> set;
78 };
79 
80 } /* namespace vsm */
81 } /* namespace ugcs */
82 
83 #endif /* _ENUM_SET_H_ */
UGCS root namespace.
Definition: android-linux/ugcs/vsm/platform_sockets.h:27
Enum_set(Enum_types...values)
Construct the set based on arbitrary set of values.
Definition: enum_set.h:25
bool operator==(const Enum_set &other) const
Equality operator.
Definition: enum_set.h:53
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:32
void Reset()
Reset state to empty.
Definition: enum_set.h:39
bool Is_set(Enum_type value) const
Check if enum value is present or not.
Definition: enum_set.h:46