blob: e1f787fe25655b5179244ca3604c273bfa7f7984 [file] [log] [blame]
Matt Spinler0ada59f2017-09-28 10:38:11 -05001#pragma once
2
3#include "trust_group.hpp"
4
5namespace phosphor
6{
7namespace fan
8{
9namespace trust
10{
11
12/**
13 * @class NonzeroSpeed
14 *
15 * A trust group where the sensors in the group are trusted as long
16 * as at least one of them has a nonzero speed. If all sensors
17 * have a speed of zero, then no sensor in the group is trusted.
18 */
19class NonzeroSpeed : public Group
20{
21 public:
22
23 NonzeroSpeed() = delete;
24 ~NonzeroSpeed() = default;
25 NonzeroSpeed(const NonzeroSpeed&) = delete;
26 NonzeroSpeed& operator=(const NonzeroSpeed&) = delete;
27 NonzeroSpeed(NonzeroSpeed&&) = default;
28 NonzeroSpeed& operator=(NonzeroSpeed&&) = default;
29
30 /**
31 * Constructor
32 *
Matthew Barth6f31d192018-01-30 13:06:27 -060033 * @param[in] names - the names of the sensors and its inclusion in
34 * determining trust for the group
Matt Spinler0ada59f2017-09-28 10:38:11 -050035 */
Matthew Barth6f31d192018-01-30 13:06:27 -060036 explicit NonzeroSpeed(const std::vector<GroupDefinition>& names) :
Matt Spinler0ada59f2017-09-28 10:38:11 -050037 Group(names)
38 {
39 }
40
41 private:
42
43 /**
44 * Determines if the group is trusted by checking
45 * if any sensor has a nonzero speed. If all speeds
46 * are zero, then no sensors in the group are trusted.
47 *
48 * @return bool - if group is trusted or not
49 */
50 bool checkGroupTrust() override
51 {
52 return std::any_of(
53 _sensors.begin(),
54 _sensors.end(),
55 [](const auto& s)
56 {
Matthew Barth6f31d192018-01-30 13:06:27 -060057 return std::get<0>(s)->getInput() != 0;
Matt Spinler0ada59f2017-09-28 10:38:11 -050058 });
59 }
60};
61
62}
63}
64}