1 #pragma once
2 
3 #include "trust_group.hpp"
4 
5 namespace phosphor
6 {
7 namespace fan
8 {
9 namespace 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  */
19 class 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          *
33          * @param[in] names - the names of the sensors and its inclusion in
34          * determining trust for the group
35          */
36         explicit NonzeroSpeed(const std::vector<GroupDefinition>& names) :
37                 Group(names)
38         {
39         }
40 
41     private:
42 
43         /**
44          * Determines if the group is trusted by checking
45          * if any sensor included in the trust determination
46          * has a nonzero speed. If all the speeds of these sensors
47          * are zero, then no sensors in the group are trusted.
48          *
49          * @return bool - if group is trusted or not
50          */
51         bool checkGroupTrust() override
52         {
53             return std::any_of(
54                     _sensors.begin(),
55                     _sensors.end(),
56                     [](const auto& s)
57                     {
58                         return s.inTrust && s.sensor->getInput() != 0;
59                     });
60         }
61 };
62 
63 }
64 }
65 }
66