diff options
-rw-r--r-- | control/types.hpp | 4 | ||||
-rw-r--r-- | control/zone.cpp | 30 | ||||
-rw-r--r-- | control/zone.hpp | 16 |
3 files changed, 50 insertions, 0 deletions
diff --git a/control/types.hpp b/control/types.hpp index d3ddb16..915b8b4 100644 --- a/control/types.hpp +++ b/control/types.hpp @@ -53,6 +53,10 @@ using PrecondGroup = std::tuple<std::string, std::string, PropertyVariantType>; +constexpr auto namePos = 0; +constexpr auto hasOwnerPos = 1; +using Service = std::tuple<std::string, bool>; + constexpr auto intervalPos = 0; using Timer = std::tuple<std::chrono::seconds>; diff --git a/control/zone.cpp b/control/zone.cpp index 3d7852e..b9a7583 100644 --- a/control/zone.cpp +++ b/control/zone.cpp @@ -115,6 +115,36 @@ void Zone::setActiveAllow(const Group* group, bool isActiveAllow) } } +void Zone::setServiceOwner(const Group* group, + const std::string& name, + const bool hasOwner) +{ + 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)) + { + std::get<hasOwnerPos>(*it) = hasOwner; + } + else + { + _services[*group].emplace_back(name, hasOwner); + } + } + catch (const std::out_of_range& oore) + { + _services[*group].emplace_back(name, hasOwner); + } +} + void Zone::setFloor(uint64_t speed) { _floorSpeed = speed; diff --git a/control/zone.hpp b/control/zone.hpp index 8869f91..9c08032 100644 --- a/control/zone.hpp +++ b/control/zone.hpp @@ -128,6 +128,17 @@ class Zone }; /** + * @brief Set or update a service name owner in use + * + * @param[in] group - Group associated with service + * @param[in] name - Service name + * @param[in] hasOwner - Whether the service is owned or not + */ + void setServiceOwner(const Group* group, + const std::string& name, + const bool hasOwner); + + /** * @brief Initialize a set speed event properties and actions * * @param[in] event - Set speed event @@ -372,6 +383,11 @@ class Zone std::map<const Group, bool> _active; /** + * @brief Map of group service names + */ + std::map<const Group, std::vector<Service>> _services; + + /** * @brief List of signal event arguments and Dbus matches for callbacks */ std::vector<SignalEvent> _signalEvents; |