blob: 54a6dc62ef0fdb5a0a90c44ed3d005d2a7086436 [file] [log] [blame]
Matthew Barthb86374d2017-04-12 10:57:19 -05001#pragma once
2
3#include <algorithm>
4#include "data_types.hpp"
5
6namespace phosphor
7{
8namespace dbus
9{
10namespace monitoring
11{
12namespace condition
13{
14
15template <typename T>
16auto countAtOrAbove(Group& items, const char* path, size_t count, T&& value)
17{
18 return [&items,
19 path,
20 count,
21 value = std::forward<T>(value)](T&& arg)
22 {
23 Group::iterator it =
24 std::find_if(items.begin(),
25 items.end(),
26 [&path](auto const& item)
27 {
28 return std::get<0>(item) == path;
29 });
30 if (it != std::end(items))
31 {
32 std::get<1>(*it) = arg;
33 }
34 size_t condCount =
35 std::count_if(items.begin(),
36 items.end(),
37 [&value](auto const& item)
38 {
39 return std::get<1>(item) >= value;
40 });
41 return condCount >= count;
42 };
43}
44
45} // namespace condition
46} // namespace monitoring
47} // namespace dbus
48} // namespace phosphor