Chris@16
|
1 #ifndef BOOST_STATECHART_EVENT_PROCESSOR_INCLUDED
|
Chris@16
|
2 #define BOOST_STATECHART_EVENT_PROCESSOR_INCLUDED
|
Chris@16
|
3 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
4 // Copyright 2002-2008 Andreas Huber Doenni
|
Chris@16
|
5 // Distributed under the Boost Software License, Version 1.0. (See accompany-
|
Chris@16
|
6 // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
7 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
8
|
Chris@16
|
9
|
Chris@16
|
10
|
Chris@16
|
11 namespace boost
|
Chris@16
|
12 {
|
Chris@16
|
13 namespace statechart
|
Chris@16
|
14 {
|
Chris@16
|
15
|
Chris@16
|
16
|
Chris@16
|
17
|
Chris@16
|
18 class event_base;
|
Chris@16
|
19
|
Chris@16
|
20
|
Chris@16
|
21
|
Chris@16
|
22 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
23 template< class Scheduler >
|
Chris@16
|
24 class event_processor
|
Chris@16
|
25 {
|
Chris@16
|
26 public:
|
Chris@16
|
27 //////////////////////////////////////////////////////////////////////////
|
Chris@16
|
28 virtual ~event_processor() {}
|
Chris@16
|
29
|
Chris@16
|
30 Scheduler & my_scheduler() const
|
Chris@16
|
31 {
|
Chris@16
|
32 return myScheduler_;
|
Chris@16
|
33 }
|
Chris@16
|
34
|
Chris@16
|
35 typedef typename Scheduler::processor_handle processor_handle;
|
Chris@16
|
36
|
Chris@16
|
37 processor_handle my_handle() const
|
Chris@16
|
38 {
|
Chris@16
|
39 return myHandle_;
|
Chris@16
|
40 }
|
Chris@16
|
41
|
Chris@16
|
42 void initiate()
|
Chris@16
|
43 {
|
Chris@16
|
44 initiate_impl();
|
Chris@16
|
45 }
|
Chris@16
|
46
|
Chris@16
|
47 void process_event( const event_base & evt )
|
Chris@16
|
48 {
|
Chris@16
|
49 process_event_impl( evt );
|
Chris@16
|
50 }
|
Chris@16
|
51
|
Chris@16
|
52 void terminate()
|
Chris@16
|
53 {
|
Chris@16
|
54 terminate_impl();
|
Chris@16
|
55 }
|
Chris@16
|
56
|
Chris@16
|
57 protected:
|
Chris@16
|
58 //////////////////////////////////////////////////////////////////////////
|
Chris@16
|
59 typedef const typename Scheduler::processor_context & my_context;
|
Chris@16
|
60
|
Chris@16
|
61 event_processor( my_context ctx ) :
|
Chris@16
|
62 myScheduler_( ctx.my_scheduler() ),
|
Chris@16
|
63 myHandle_( ctx.my_handle() )
|
Chris@16
|
64 {
|
Chris@16
|
65 }
|
Chris@16
|
66
|
Chris@16
|
67 private:
|
Chris@16
|
68 //////////////////////////////////////////////////////////////////////////
|
Chris@16
|
69 virtual void initiate_impl() = 0;
|
Chris@16
|
70 virtual void process_event_impl( const event_base & evt ) = 0;
|
Chris@16
|
71 virtual void terminate_impl() = 0;
|
Chris@16
|
72
|
Chris@16
|
73 // avoids C4512 (assignment operator could not be generated)
|
Chris@16
|
74 event_processor & operator=( const event_processor & );
|
Chris@16
|
75
|
Chris@16
|
76 Scheduler & myScheduler_;
|
Chris@16
|
77 const processor_handle myHandle_;
|
Chris@16
|
78 };
|
Chris@16
|
79
|
Chris@16
|
80
|
Chris@16
|
81
|
Chris@16
|
82 } // namespace statechart
|
Chris@16
|
83 } // namespace boost
|
Chris@16
|
84
|
Chris@16
|
85
|
Chris@16
|
86
|
Chris@16
|
87 #endif
|