Chris@16: #ifndef BOOST_STATECHART_EVENT_PROCESSOR_INCLUDED Chris@16: #define BOOST_STATECHART_EVENT_PROCESSOR_INCLUDED Chris@16: ////////////////////////////////////////////////////////////////////////////// Chris@16: // Copyright 2002-2008 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: 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 Scheduler > Chris@16: class event_processor Chris@16: { Chris@16: public: Chris@16: ////////////////////////////////////////////////////////////////////////// Chris@16: virtual ~event_processor() {} Chris@16: Chris@16: Scheduler & my_scheduler() const Chris@16: { Chris@16: return myScheduler_; Chris@16: } Chris@16: Chris@16: typedef typename Scheduler::processor_handle processor_handle; Chris@16: Chris@16: processor_handle my_handle() const Chris@16: { Chris@16: return myHandle_; Chris@16: } Chris@16: Chris@16: void initiate() Chris@16: { Chris@16: initiate_impl(); Chris@16: } Chris@16: Chris@16: void process_event( const event_base & evt ) Chris@16: { Chris@16: process_event_impl( evt ); Chris@16: } Chris@16: Chris@16: void terminate() Chris@16: { Chris@16: terminate_impl(); Chris@16: } Chris@16: Chris@16: protected: Chris@16: ////////////////////////////////////////////////////////////////////////// Chris@16: typedef const typename Scheduler::processor_context & my_context; Chris@16: Chris@16: event_processor( my_context ctx ) : Chris@16: myScheduler_( ctx.my_scheduler() ), Chris@16: myHandle_( ctx.my_handle() ) Chris@16: { Chris@16: } Chris@16: Chris@16: private: Chris@16: ////////////////////////////////////////////////////////////////////////// Chris@16: virtual void initiate_impl() = 0; Chris@16: virtual void process_event_impl( const event_base & evt ) = 0; Chris@16: virtual void terminate_impl() = 0; Chris@16: Chris@16: // avoids C4512 (assignment operator could not be generated) Chris@16: event_processor & operator=( const event_processor & ); Chris@16: Chris@16: Scheduler & myScheduler_; Chris@16: const processor_handle myHandle_; 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