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