/* * File: FsmProcess.tcc * Author: jens * * Created on 24. Januar 2015, 18:01 */ #ifndef FSMPROCESS_TCC #define FSMPROCESS_TCC #include "FsmProcess.hpp" template FsmProcess::FsmProcess(Context &context) : AStateMachine() , init(IFsmProcess::INIT, context) , idle(IFsmProcess::IDLE, context) , active0(IFsmProcess::ACTIVE_0, context) , active1(IFsmProcess::ACTIVE_1, context) { add(&init); add(&idle); add(&active0); add(&active1); } template FsmProcess::~FsmProcess() { } template void FsmProcess::process(int x) { dynamic_cast(currState())->process(x); } template FsmProcess::StateInit::StateInit(IFsmProcess::StateId id, Context &context) : AState(id) , m_context(context) { } template FsmProcess::StateInit::~StateInit() { } // Transition to Init is reset template void FsmProcess::StateInit::onTransition() { printf("%s\n", __PRETTY_FUNCTION__); } template void FsmProcess::StateInit::process(int x) { printf("%s() x=%d\n", __PRETTY_FUNCTION__, x); setState(IFsmProcess::IDLE); } template FsmProcess::StateIdle::StateIdle(IFsmProcess::StateId id, Context &context) : AState(id) , m_context(context) { } template FsmProcess::StateIdle::~StateIdle() {} template void FsmProcess::StateIdle::onTransition() { printf("%s\n", __PRETTY_FUNCTION__); m_context.m_count = 0; } template void FsmProcess::StateIdle::process(int x) { printf("%s() x=%d\n", __PRETTY_FUNCTION__, x); if (x >= 10) { setState(IFsmProcess::ACTIVE_0); } } template <> void FsmProcess::StateIdle::process(int x) { printf("%s() x=%d\n", __PRETTY_FUNCTION__, x); if (x >= 10) { setState(IFsmProcess::ACTIVE_0); } } template FsmProcess::StateActive0::StateActive0(IFsmProcess::StateId id, Context &context) : AState(id) , m_context(context) { } template FsmProcess::StateActive0::~StateActive0() { } template void FsmProcess::StateActive0::onTransition() { m_context.m_count = 0; printf("%s, Count = %d\n", __PRETTY_FUNCTION__, m_context.m_count); } template void FsmProcess::StateActive0::process(int x) { printf("%s() x=%d\n", __PRETTY_FUNCTION__, x); m_context.m_count++; if (m_context.m_count == 10) { setState(IFsmProcess::ACTIVE_1); } } template FsmProcess::StateActive1::StateActive1(IFsmProcess::StateId id, Context &context) : AState(id) , m_context(context) { } template FsmProcess::StateActive1::~StateActive1() { } template void FsmProcess::StateActive1::onTransition() { m_context.m_count = 5; printf("%s, Count = %d\n", __PRETTY_FUNCTION__, m_context.m_count); } template void FsmProcess::StateActive1::process(int x) { printf("%s() x=%d\n", __PRETTY_FUNCTION__, x); m_context.m_count--; if (m_context.m_count == 0) { setState(IFsmProcess::ACTIVE_0); } } #endif /* FSMPROCESS_TCC */