From d9edcad8459d3e60c27d1b4a14ecc8446b90e0fb Mon Sep 17 00:00:00 2001 From: Alexey Rybalchenko Date: Tue, 26 Feb 2019 13:10:51 +0100 Subject: [PATCH] Add backwards compatibility for removed ChangeState(int) --- fairmq/FairMQDevice.cxx | 20 ++++++++++++++++++++ fairmq/FairMQDevice.h | 2 ++ fairmq/StateMachine.cxx | 18 +++--------------- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/fairmq/FairMQDevice.cxx b/fairmq/FairMQDevice.cxx index 259161af..7e6beba7 100644 --- a/fairmq/FairMQDevice.cxx +++ b/fairmq/FairMQDevice.cxx @@ -40,6 +40,21 @@ static map backwardsCompatibilityWaitForE { fair::mq::Transition::ResetDevice, fair::mq::State::Idle } }; +static map backwardsCompatibilityChangeStateHelper = +{ + { FairMQDevice::Event::INIT_DEVICE, fair::mq::Transition::InitDevice }, + { FairMQDevice::Event::internal_DEVICE_READY, fair::mq::Transition::Auto }, + { FairMQDevice::Event::INIT_TASK, fair::mq::Transition::InitTask }, + { FairMQDevice::Event::internal_READY, fair::mq::Transition::Auto }, + { FairMQDevice::Event::RUN, fair::mq::Transition::Run }, + { FairMQDevice::Event::STOP, fair::mq::Transition::Stop }, + { FairMQDevice::Event::RESET_TASK, fair::mq::Transition::ResetTask }, + { FairMQDevice::Event::RESET_DEVICE, fair::mq::Transition::ResetDevice }, + { FairMQDevice::Event::internal_IDLE, fair::mq::Transition::Auto }, + { FairMQDevice::Event::END, fair::mq::Transition::End }, + { FairMQDevice::Event::ERROR_FOUND, fair::mq::Transition::ErrorFound } +}; + FairMQDevice::FairMQDevice() : FairMQDevice(nullptr, {0, 0, 0}) { @@ -162,6 +177,11 @@ void FairMQDevice::WaitForState(fair::mq::State state) while (WaitForNextState() != state) {} } +bool FairMQDevice::ChangeState(const int transition) +{ + return ChangeState(backwardsCompatibilityChangeStateHelper.at(transition)); +} + void FairMQDevice::WaitForEndOfState(fair::mq::Transition transition) { WaitForState(backwardsCompatibilityWaitForEndOfStateHelper.at(transition)); diff --git a/fairmq/FairMQDevice.h b/fairmq/FairMQDevice.h index e72181b5..0c6ba4f8 100644 --- a/fairmq/FairMQDevice.h +++ b/fairmq/FairMQDevice.h @@ -476,6 +476,8 @@ class FairMQDevice bool ChangeState(const fair::mq::Transition transition) { return fStateMachine.ChangeState(transition); } bool ChangeState(const std::string& transition) { return fStateMachine.ChangeState(fair::mq::StateMachine::GetTransition(transition)); } + bool ChangeState(const int transition) __attribute__((deprecated("Use ChangeState(const fair::mq::Transition transition)."))); + void WaitForEndOfState(const fair::mq::Transition transition) __attribute__((deprecated("Use WaitForState(fair::mq::State expectedState)."))); void WaitForEndOfState(const std::string& transition) __attribute__((deprecated("Use WaitForState(fair::mq::State expectedState)."))) { WaitForState(transition); } diff --git a/fairmq/StateMachine.cxx b/fairmq/StateMachine.cxx index 36908c01..7e446d33 100644 --- a/fairmq/StateMachine.cxx +++ b/fairmq/StateMachine.cxx @@ -201,20 +201,6 @@ struct Machine_ : public state_machine_def } }; - struct ErrorFct - { - template - void operator()(EVT const& e, FSM& fsm, SourceState& /* ss */, TargetState& ts) - { - fsm.fState = ts.Type(); - fsm.fLastTransitionResult = true; - fsm.CallNewTransitionCallbacks(e.Type()); - fsm.CallStateChangeCallbacks(ts.Type()); - fsm.fNewStatePending = true; - fsm.fNewStatePendingCV.notify_all(); - } - }; - struct transition_table : bmpl::vector< // Start Transition Next Action Guard Row, @@ -242,7 +228,7 @@ struct Machine_ : public state_machine_def Row, Row, - Row> {}; + Row> {}; void CallStateChangeCallbacks(const State state) const { @@ -480,6 +466,8 @@ void StateMachine::ProcessWork() } catch(...) { { lock_guard lock(fsm->fStateMtx); + fsm->fState = State::Error; + fsm->CallStateChangeCallbacks(State::Error); fsm->fWorkOngoing = false; fsm->fWorkDoneCV.notify_one(); }