diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2019-09-20 09:33:24 -0600 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2019-09-20 09:38:17 -0600 |
commit | b075c67e514be77381509464cc44b0ec2406cf71 (patch) | |
tree | 28130f92770328c7d0c3cff88a6493048abaeb3b /libs/ardour/transport_fsm.cc | |
parent | ea8ec745651008a844ab5d17c0a96959505151b0 (diff) |
use boost::intrusive to manage FSM events (this is all RT code)
Diffstat (limited to 'libs/ardour/transport_fsm.cc')
-rw-r--r-- | libs/ardour/transport_fsm.cc | 54 |
1 files changed, 27 insertions, 27 deletions
diff --git a/libs/ardour/transport_fsm.cc b/libs/ardour/transport_fsm.cc index 4c7251328f..2b02346852 100644 --- a/libs/ardour/transport_fsm.cc +++ b/libs/ardour/transport_fsm.cc @@ -41,7 +41,7 @@ void* TransportFSM::FSMEvent::operator new (size_t) { return pool->alloc(); -} + } void TransportFSM::FSMEvent::operator delete (void *ptr, size_t /*size*/) @@ -71,13 +71,11 @@ TransportFSM::process_events () processing++; while (!queued_events.empty()) { - FSMEvent* ev = queued_events.front(); - queued_events.pop (); MotionState oms = _motion_state; ButlerState obs = _butler_state; - if (process_event (ev)) { /* event processed successfully */ + if (process_event (queued_events.front())) { /* event processed successfully */ if (oms != _motion_state || obs != _butler_state) { @@ -88,9 +86,9 @@ TransportFSM::process_events () if (!deferred_events.empty() ){ DEBUG_TRACE (DEBUG::TFSMEvents, string_compose ("processing %1 deferred events\n", deferred_events.size())); - for (std::list<FSMEvent*>::iterator e = deferred_events.begin(); e != deferred_events.end(); ) { - FSMEvent* deferred_ev = *e; - if (process_event (deferred_ev)) { /* event processed, remove from deferred */ + for (EventList::iterator e = deferred_events.begin(); e != deferred_events.end(); ) { + FSMEvent* deferred_ev = &(*e); + if (process_event (*e)) { /* event processed, remove from deferred */ e = deferred_events.erase (e); delete deferred_ev; } else { @@ -101,6 +99,8 @@ TransportFSM::process_events () } } + FSMEvent* ev = &queued_events.front(); + queued_events.pop_front (); delete ev; } @@ -166,18 +166,18 @@ TransportFSM::current_state () const } void -TransportFSM::bad_transition (FSMEvent const * ev) +TransportFSM::bad_transition (FSMEvent const & ev) { - error << "bad transition, current state = " << current_state() << " event = " << enum_2_string (ev->type) << endmsg; - std::cerr << "bad transition, current state = " << current_state() << " event = " << enum_2_string (ev->type) << std::endl; + error << "bad transition, current state = " << current_state() << " event = " << enum_2_string (ev.type) << endmsg; + std::cerr << "bad transition, current state = " << current_state() << " event = " << enum_2_string (ev.type) << std::endl; } bool -TransportFSM::process_event (FSMEvent* ev) +TransportFSM::process_event (FSMEvent& ev) { - DEBUG_TRACE (DEBUG::TFSMEvents, string_compose ("process %1\n", enum_2_string (ev->type))); + DEBUG_TRACE (DEBUG::TFSMEvents, string_compose ("process %1\n", enum_2_string (ev.type))); - switch (ev->type) { + switch (ev.type) { case StartTransport: switch (_motion_state) { @@ -305,11 +305,11 @@ TransportFSM::start_playback () } void -TransportFSM::start_declick (FSMEvent const * s) +TransportFSM::start_declick (FSMEvent const & s) { - assert (s->type == StopTransport); + assert (s.type == StopTransport); DEBUG_TRACE (DEBUG::TFSMEvents, "tfsm::start_declick\n"); - _last_stop = *s; + _last_stop = s; } void @@ -320,20 +320,20 @@ TransportFSM::stop_playback () } void -TransportFSM::save_locate_and_start_declick (FSMEvent const * l) +TransportFSM::save_locate_and_start_declick (FSMEvent const & l) { - assert (l->type == Locate); + assert (l.type == Locate); DEBUG_TRACE (DEBUG::TFSMEvents, "tfsm::save_locate_and_stop\n"); - _last_locate = *l; + _last_locate = l; _last_stop = FSMEvent (StopTransport, false, false); } void -TransportFSM::start_locate (FSMEvent const * l) +TransportFSM::start_locate (FSMEvent const & l) { - assert (l->type == Locate); + assert (l.type == Locate); DEBUG_TRACE (DEBUG::TFSMEvents, "tfsm::start_locate\n"); - api->locate (l->target, l->with_roll, l->with_flush, l->with_loop, l->force); + api->locate (l.target, l.with_roll, l.with_flush, l.with_loop, l.force); } void @@ -344,14 +344,14 @@ TransportFSM::start_saved_locate () } void -TransportFSM::interrupt_locate (FSMEvent const * l) +TransportFSM::interrupt_locate (FSMEvent const & l) { - assert (l->type == Locate); + assert (l.type == Locate); DEBUG_TRACE (DEBUG::TFSMEvents, "tfsm::interrupt\n"); /* maintain original "with-roll" choice of initial locate, even though * we are interrupting the locate to start a new one. */ - api->locate (l->target, _last_locate.with_roll, l->with_flush, l->with_loop, l->force); + api->locate (l.target, _last_locate.with_roll, l.with_flush, l.with_loop, l.force); } void @@ -376,9 +376,9 @@ TransportFSM::roll_after_locate () } void -TransportFSM::defer (FSMEvent* ev) +TransportFSM::defer (FSMEvent& ev) { - DEBUG_TRACE (DEBUG::TFSMEvents, string_compose ("Defer %1 during %2\n", enum_2_string (ev->type), current_state())); + DEBUG_TRACE (DEBUG::TFSMEvents, string_compose ("Defer %1 during %2\n", enum_2_string (ev.type), current_state())); deferred_events.push_back (ev); } |