blob: 3d14adfabe0b102d4d6c9853a4acb46d38c1409b [file] [log] [blame]
#pragma once
#include "trust_group.hpp"
namespace phosphor
{
namespace fan
{
namespace trust
{
/**
* @class NonzeroSpeed
*
* A trust group where the sensors in the group are trusted as long
* as at least one of them has a nonzero speed. If all sensors
* have a speed of zero, then no sensor in the group is trusted.
*/
class NonzeroSpeed : public Group
{
public:
NonzeroSpeed() = delete;
~NonzeroSpeed() = default;
NonzeroSpeed(const NonzeroSpeed&) = delete;
NonzeroSpeed& operator=(const NonzeroSpeed&) = delete;
NonzeroSpeed(NonzeroSpeed&&) = default;
NonzeroSpeed& operator=(NonzeroSpeed&&) = default;
/**
* Constructor
*
* @param[in] names - the names of the sensors in the group
*/
explicit NonzeroSpeed(const std::vector<std::string>& names) :
Group(names)
{
}
private:
/**
* Determines if the group is trusted by checking
* if any sensor has a nonzero speed. If all speeds
* are zero, then no sensors in the group are trusted.
*
* @return bool - if group is trusted or not
*/
bool checkGroupTrust() override
{
return std::any_of(
_sensors.begin(),
_sensors.end(),
[](const auto& s)
{
return s.get()->getInput() != 0;
});
}
};
}
}
}