| #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 |