| #ifndef BOOST_STATECHART_ASYNCHRONOUS_STATE_MACHINE_HPP_INCLUDED |
| #define BOOST_STATECHART_ASYNCHRONOUS_STATE_MACHINE_HPP_INCLUDED |
| ////////////////////////////////////////////////////////////////////////////// |
| // Copyright 2002-2006 Andreas Huber Doenni |
| // Distributed under the Boost Software License, Version 1.0. (See accompany- |
| // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
| ////////////////////////////////////////////////////////////////////////////// |
| |
| |
| |
| #include <boost/statechart/state_machine.hpp> |
| #include <boost/statechart/fifo_scheduler.hpp> |
| #include <boost/statechart/null_exception_translator.hpp> |
| #include <boost/statechart/event_processor.hpp> |
| |
| #include <memory> // std::allocator |
| |
| |
| namespace boost |
| { |
| namespace statechart |
| { |
| |
| |
| |
| class event_base; |
| |
| |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| template< class MostDerived, |
| class InitialState, |
| class Scheduler = fifo_scheduler<>, |
| class Allocator = std::allocator< void >, |
| class ExceptionTranslator = null_exception_translator > |
| class asynchronous_state_machine : public state_machine< |
| MostDerived, InitialState, Allocator, ExceptionTranslator >, |
| public event_processor< Scheduler > |
| { |
| typedef state_machine< MostDerived, |
| InitialState, Allocator, ExceptionTranslator > machine_base; |
| typedef event_processor< Scheduler > processor_base; |
| protected: |
| ////////////////////////////////////////////////////////////////////////// |
| typedef asynchronous_state_machine my_base; |
| |
| asynchronous_state_machine( typename processor_base::my_context ctx ) : |
| processor_base( ctx ) |
| { |
| } |
| |
| virtual ~asynchronous_state_machine() {} |
| |
| public: |
| ////////////////////////////////////////////////////////////////////////// |
| // The following declarations should be private. |
| // They are only public because many compilers lack template friends. |
| ////////////////////////////////////////////////////////////////////////// |
| void terminate() |
| { |
| processor_base::terminate(); |
| } |
| |
| private: |
| ////////////////////////////////////////////////////////////////////////// |
| virtual void initiate_impl() |
| { |
| machine_base::initiate(); |
| } |
| |
| virtual void process_event_impl( const event_base & evt ) |
| { |
| machine_base::process_event( evt ); |
| } |
| |
| virtual void terminate_impl() |
| { |
| machine_base::terminate(); |
| } |
| }; |
| |
| |
| |
| } // namespace statechart |
| } // namespace boost |
| |
| |
| |
| #endif |