iceoryx_doc  1.0.1
set.hpp
1 // Copyright (c) 2019 by Robert Bosch GmbH. All rights reserved.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 //
15 // SPDX-License-Identifier: Apache-2.0
16 #ifndef IOX_UTILS_CXX_SET_HPP
17 #define IOX_UTILS_CXX_SET_HPP
18 
19 #include <algorithm>
20 
21 namespace iox
22 {
23 namespace cxx
24 {
25 namespace set
26 {
31 template <typename Container, typename Type = typename Container::value_type>
32 void add(Container& container, const Type& entry)
33 {
34  auto iter = std::find(container.begin(), container.end(), entry);
35  if (iter == container.end())
36  {
37  container.push_back(entry);
38  }
39 }
40 
44 template <typename Container, typename Type = typename Container::value_type>
45 void remove(Container& container, const Type& entry)
46 {
47  auto iter = std::find(container.begin(), container.end(), entry);
48  if (iter != container.end())
49  {
50  container.erase(iter);
51  }
52 }
53 
58 template <typename Container, typename Type = typename Container::value_type>
59 bool hasElement(Container& container, const Type& entry)
60 {
61  auto iter = std::find(container.begin(), container.end(), entry);
62  return iter != container.end();
63 }
64 
69 template <typename Container>
70 Container& unify(Container& set1, const Container& set2)
71 {
72  for (auto& element : set2)
73  {
74  add(set1, element);
75  }
76  return set1;
77 }
78 
79 } // namespace set
80 } // namespace cxx
81 } // namespace iox
82 
83 #endif // IOX_UTILS_CXX_SET_HPP
building block to easily create free function for logging in a library context
Definition: lockfree_queue.hpp:28