88 lines
2.0 KiB
C++
88 lines
2.0 KiB
C++
#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
|