diff options
author | Matthew Barth <msbarth@us.ibm.com> | 2017-11-06 13:34:32 -0600 |
---|---|---|
committer | Matthew Barth <msbarth@us.ibm.com> | 2017-11-17 13:14:11 -0600 |
commit | 55dea64300f44adc5146da3764ab52d39b546518 (patch) | |
tree | 08f2f855f52ddd896981a76acc0bfa9f6f1126a7 | |
parent | 480787c118fb511a8fe23a19f97bcf24b564c11e (diff) | |
download | phosphor-fan-presence-55dea64300f44adc5146da3764ab52d39b546518.tar.gz phosphor-fan-presence-55dea64300f44adc5146da3764ab52d39b546518.zip |
Remove empty service name
Before refreshing the service names and states for a group, the empty
service name should be removed if it exists. An empty service name may
exist where upon startup, a particular service was not found for a
member or members of a group.
Change-Id: I15d224231bb9db0823866393ec1776f793a3c126
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
-rw-r--r-- | control/zone.cpp | 29 | ||||
-rw-r--r-- | control/zone.hpp | 9 |
2 files changed, 37 insertions, 1 deletions
diff --git a/control/zone.cpp b/control/zone.cpp index 5fe9b01..784004e 100644 --- a/control/zone.cpp +++ b/control/zone.cpp @@ -120,6 +120,32 @@ void Zone::setActiveAllow(const Group* group, bool isActiveAllow) } } +void Zone::removeService(const Group* group, + const std::string& name) +{ + try + { + auto& sNames = _services.at(*group); + auto it = std::find_if( + sNames.begin(), + sNames.end(), + [&name](auto const& entry) + { + return name == std::get<namePos>(entry); + } + ); + if (it != std::end(sNames)) + { + // Remove service name from group + sNames.erase(it); + } + } + catch (const std::out_of_range& oore) + { + // No services for group found + } +} + void Zone::setServiceOwner(const Group* group, const std::string& name, const bool hasOwner) @@ -152,7 +178,8 @@ void Zone::setServiceOwner(const Group* group, void Zone::setServices(const Group* group) { - // TODO Remove empty service name if exists + // Remove the empty service name if exists + removeService(group, ""); for (auto it = group->begin(); it != group->end(); ++it) { std::string name; diff --git a/control/zone.hpp b/control/zone.hpp index 9565933..dbf4378 100644 --- a/control/zone.hpp +++ b/control/zone.hpp @@ -140,6 +140,15 @@ class Zone }; /** + * @brief Remove a service associated to a group + * + * @param[in] group - Group associated with service + * @param[in] name - Service name to remove + */ + void removeService(const Group* group, + const std::string& name); + + /** * @brief Set or update a service name owner in use * * @param[in] group - Group associated with service |