You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.1 KiB
74 lines
2.1 KiB
//
|
|
// CounterState.h
|
|
//
|
|
// implements an up/down-Counter
|
|
// this file contains all classes of the state machine
|
|
// it may make sense to have separate files for each state
|
|
//
|
|
// (C) R. Bonderer, HSR Hochschule Rapperswil, Oct. 2018
|
|
//
|
|
|
|
#ifndef COUNTERSTATE_H__
|
|
#define COUNTERSTATE_H__
|
|
#include "CounterCtrl.h"
|
|
|
|
class CounterState // abstract base class
|
|
{
|
|
public:
|
|
static CounterState* init(Counter& entity);
|
|
// should be called first, returns new state
|
|
virtual CounterState* handle(Counter& entity, CounterCtrl::Event e) = 0;
|
|
// returns new state
|
|
protected:
|
|
virtual void entryAction(Counter& entity) {};
|
|
virtual void exitAction(Counter& entity) {};
|
|
typedef void (CounterState::*Action)(Counter& entity); // ptr to action function
|
|
CounterState* changeState(Counter& entity, Action ptransAction, CounterState* pnewState);
|
|
|
|
// transition actions
|
|
void emptyAction(Counter& entity) {};
|
|
void showCounter(Counter& entity);
|
|
void countUp(Counter& entity);
|
|
void countDown(Counter& entity);
|
|
};
|
|
|
|
class IdleState : public CounterState // it's a singleton
|
|
{
|
|
public:
|
|
static IdleState* getInstance();
|
|
virtual CounterState* handle(Counter& entity, CounterCtrl::Event e);
|
|
protected:
|
|
virtual void entryAction(Counter& entity);
|
|
virtual void exitAction(Counter& entity);
|
|
private:
|
|
IdleState() {};
|
|
static IdleState instance;
|
|
};
|
|
|
|
class CountUpState : public CounterState // it's a singleton
|
|
{
|
|
public:
|
|
static CountUpState* getInstance();
|
|
virtual CounterState* handle(Counter& entity, CounterCtrl::Event e);
|
|
protected:
|
|
virtual void entryAction(Counter& entity);
|
|
virtual void exitAction(Counter& entity);
|
|
private:
|
|
CountUpState() {};
|
|
static CountUpState instance;
|
|
};
|
|
|
|
class CountDownState : public CounterState // it's a singleton
|
|
{
|
|
public:
|
|
static CountDownState* getInstance();
|
|
virtual CounterState* handle(Counter& entity, CounterCtrl::Event e);
|
|
protected:
|
|
virtual void entryAction(Counter& entity);
|
|
virtual void exitAction(Counter& entity);
|
|
private:
|
|
CountDownState() {};
|
|
static CountDownState instance;
|
|
};
|
|
#endif
|