xref: /openbmc/telemetry/src/utils/contains.hpp (revision fdb06a14)
1 #pragma once
2 
3 #include <algorithm>
4 
5 namespace utils
6 {
7 namespace detail
8 {
9 
10 template <class T>
11 concept HasMemberFind = requires(T container)
12 {
13     container.find(container.begin()->first);
14 };
15 
16 template <class T>
17 concept HasMemberContains = requires(T container)
18 {
19     container.contains(*container.begin());
20 };
21 
22 } // namespace detail
23 
24 template <detail::HasMemberFind T>
25 inline bool contains(const T& container,
26                      const typename T::value_type::first_type& key)
27 {
28     return container.find(key) != container.end();
29 }
30 
31 template <detail::HasMemberContains T>
32 inline bool contains(const T& container, const typename T::value_type& key)
33 {
34     return container.contains(key);
35 }
36 
37 template <class T>
38 inline bool contains(const T& container, const typename T::value_type& key)
39 {
40     return std::find(container.begin(), container.end(), key) !=
41            container.end();
42 }
43 
44 } // namespace utils
45