diff options
author | William A. Kennington III <wak@google.com> | 2018-10-30 19:00:27 -0700 |
---|---|---|
committer | William A. Kennington III <wak@google.com> | 2018-11-05 11:43:07 -0800 |
commit | 94fe1a0c83ba2d0dadc549b1d8afedf6478d2dcf (patch) | |
tree | d46070fc9ad670f751387f94c20e9fde90df89a0 /control/zone.cpp | |
parent | 122b843fdef01a66c602d1270d50b7db576e7167 (diff) | |
download | phosphor-fan-presence-94fe1a0c83ba2d0dadc549b1d8afedf6478d2dcf.tar.gz phosphor-fan-presence-94fe1a0c83ba2d0dadc549b1d8afedf6478d2dcf.zip |
control/zone: Refactor addTimer
Anything adding a timer uses roughly the same process of building the
event data and timer from the event group, actions, and timer config. We
can adjust the method to do this for all callers.
Tested:
Builds and passes unit tests.
Change-Id: I4013ff2f7bff65095a6e1db7075bc013da374f51
Signed-off-by: William A. Kennington III <wak@google.com>
Diffstat (limited to 'control/zone.cpp')
-rw-r--r-- | control/zone.cpp | 49 |
1 files changed, 26 insertions, 23 deletions
diff --git a/control/zone.cpp b/control/zone.cpp index 5f0c15d..ec0f944 100644 --- a/control/zone.cpp +++ b/control/zone.cpp @@ -335,29 +335,9 @@ void Zone::initEvent(const SetSpeedEvent& event) auto timerConf = std::get<timerConfPos>(event); if (std::get<intervalPos>(timerConf) != seconds(0)) { - // Associate event data with timer - std::unique_ptr<EventData> eventData = - std::make_unique<EventData>( - std::get<groupPos>(event), - "", - nullptr, - std::get<actionsPos>(event) - ); - std::unique_ptr<util::Timer> timer = - std::make_unique<util::Timer>( - _eventLoop, - [this, - action = &(std::get<actionsPos>(event)), - group = &(std::get<groupPos>(event))]() - { - this->timerExpired(*group, *action); - }); - if (!timer->running()) - { - timer->start(std::get<intervalPos>(timerConf), - std::get<typePos>(timerConf)); - } - addTimer(std::move(eventData), std::move(timer)); + addTimer(std::get<groupPos>(event), + std::get<actionsPos>(event), + timerConf); } // Run action functions for initial event state std::for_each( @@ -448,6 +428,29 @@ std::vector<TimerEvent>::iterator Zone::findTimer( return _timerEvents.end(); } +void Zone::addTimer(const Group& group, + const std::vector<Action>& actions, + const TimerConf& tConf) +{ + // Associate event data with timer + auto data = std::make_unique<EventData>( + group, + "", + nullptr, + actions + ); + auto timer = std::make_unique<util::Timer>( + _eventLoop, + std::bind(&Zone::timerExpired, this, group, actions) + ); + if (!timer->running()) + { + timer->start(std::get<intervalPos>(tConf), + std::get<typePos>(tConf)); + } + _timerEvents.emplace_back(std::move(data), std::move(timer)); +} + void Zone::timerExpired(Group eventGroup, std::vector<Action> eventActions) { // Perform the actions |