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