diff options
author | Robin Gareus <robin@gareus.org> | 2019-03-14 01:11:10 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2019-03-14 01:11:10 +0100 |
commit | 41e0255b974532f1eacbad7f4664ba9a12be3aba (patch) | |
tree | 81dea341d23881036c975b8a2257238c8f4c9d66 /libs/ardour/session_process.cc | |
parent | 871bd6e0f3df67c6a7248116776bd041fad1ca85 (diff) |
Unused skeleton of the transport state-machine
Simple test/example code. Eventually this is to replace
Session::process_event() and Session::realtime_*() methods
are to become transition actions.
Diffstat (limited to 'libs/ardour/session_process.cc')
-rw-r--r-- | libs/ardour/session_process.cc | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/libs/ardour/session_process.cc b/libs/ardour/session_process.cc index 1046218054..319634499b 100644 --- a/libs/ardour/session_process.cc +++ b/libs/ardour/session_process.cc @@ -22,6 +22,9 @@ #include <algorithm> #include <unistd.h> +#include <boost/msm/back/state_machine.hpp> +#include <boost/msm/front/state_machine_def.hpp> + #include "pbd/error.h" #include "pbd/enumwriter.h" @@ -53,6 +56,90 @@ using namespace ARDOUR; using namespace PBD; using namespace std; +/* state machine */ +namespace msm = boost::msm; +namespace mpl = boost::mpl; + +namespace TransportState +{ + /* events */ + struct play {}; + struct stop {}; + + /* front-end: define the FSM structure */ + struct TransportFSM : public msm::front::state_machine_def<TransportFSM> + { + + /* FSM states */ + struct Stopped : public msm::front::state<> + { + template <class Event,class FSM> void + on_entry (Event const&, FSM&) + { + std::cout << "entering: Stopped" << std::endl; + } + template <class Event,class FSM> void + on_exit (Event const&, FSM&) + { + std::cout << "leaving: Stopped" << std::endl; + } + }; + + struct Playing : public msm::front::state<> + { + template <class Event,class FSM> void + on_entry (Event const&, FSM&) + { + std::cout << "entering: Playing" << std::endl; + } + + template <class Event,class FSM> void + on_exit (Event const&, FSM&) + { + std::cout << "leaving: Playing" << std::endl; + } + }; + + /* the initial state */ + typedef Stopped initial_state; + + /* transition actions */ + void start_playback (play const&) + { + std::cout << "player::start_playback\n"; + } + + void stop_playback (stop const&) + { + std::cout << "player::stop_playback\n"; + } + + typedef TransportFSM _t; // makes transition table cleaner + + struct transition_table : mpl::vector< + // Start Event Next Action Guard + // +---------+-------------+---------+---------------------+----------------------+ + a_row < Stopped , play , Playing , &_t::start_playback >, + _row < Stopped , stop , Stopped >, + // +---------+-------------+---------+---------------------+----------------------+ + a_row < Playing , stop , Stopped , &_t::stop_playback > + // +---------+-------------+---------+---------------------+----------------------+ + > {}; + }; + + typedef msm::back::state_machine<TransportFSM> transport_fsm; + + void test() + { + transport_fsm t; + t.start (); + t.process_event (play()); + t.process_event (stop()); + t.stop(); + } + +}; + /** Called by the audio engine when there is work to be done with JACK. * @param nframes Number of samples to process. */ |