Chris@16
|
1 #ifndef BOOST_STATECHART_ASYNCHRONOUS_STATE_MACHINE_HPP_INCLUDED
|
Chris@16
|
2 #define BOOST_STATECHART_ASYNCHRONOUS_STATE_MACHINE_HPP_INCLUDED
|
Chris@16
|
3 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
4 // Copyright 2002-2006 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 #include <boost/statechart/state_machine.hpp>
|
Chris@16
|
12 #include <boost/statechart/fifo_scheduler.hpp>
|
Chris@16
|
13 #include <boost/statechart/null_exception_translator.hpp>
|
Chris@16
|
14 #include <boost/statechart/event_processor.hpp>
|
Chris@16
|
15
|
Chris@16
|
16 #include <memory> // std::allocator
|
Chris@16
|
17
|
Chris@16
|
18
|
Chris@16
|
19 namespace boost
|
Chris@16
|
20 {
|
Chris@16
|
21 namespace statechart
|
Chris@16
|
22 {
|
Chris@16
|
23
|
Chris@16
|
24
|
Chris@16
|
25
|
Chris@16
|
26 class event_base;
|
Chris@16
|
27
|
Chris@16
|
28
|
Chris@16
|
29
|
Chris@16
|
30 //////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
31 template< class MostDerived,
|
Chris@16
|
32 class InitialState,
|
Chris@16
|
33 class Scheduler = fifo_scheduler<>,
|
Chris@16
|
34 class Allocator = std::allocator< void >,
|
Chris@16
|
35 class ExceptionTranslator = null_exception_translator >
|
Chris@16
|
36 class asynchronous_state_machine : public state_machine<
|
Chris@16
|
37 MostDerived, InitialState, Allocator, ExceptionTranslator >,
|
Chris@16
|
38 public event_processor< Scheduler >
|
Chris@16
|
39 {
|
Chris@16
|
40 typedef state_machine< MostDerived,
|
Chris@16
|
41 InitialState, Allocator, ExceptionTranslator > machine_base;
|
Chris@16
|
42 typedef event_processor< Scheduler > processor_base;
|
Chris@16
|
43 protected:
|
Chris@16
|
44 //////////////////////////////////////////////////////////////////////////
|
Chris@16
|
45 typedef asynchronous_state_machine my_base;
|
Chris@16
|
46
|
Chris@16
|
47 asynchronous_state_machine( typename processor_base::my_context ctx ) :
|
Chris@16
|
48 processor_base( ctx )
|
Chris@16
|
49 {
|
Chris@16
|
50 }
|
Chris@16
|
51
|
Chris@16
|
52 virtual ~asynchronous_state_machine() {}
|
Chris@16
|
53
|
Chris@16
|
54 public:
|
Chris@16
|
55 //////////////////////////////////////////////////////////////////////////
|
Chris@16
|
56 // The following declarations should be private.
|
Chris@16
|
57 // They are only public because many compilers lack template friends.
|
Chris@16
|
58 //////////////////////////////////////////////////////////////////////////
|
Chris@16
|
59 void terminate()
|
Chris@16
|
60 {
|
Chris@16
|
61 processor_base::terminate();
|
Chris@16
|
62 }
|
Chris@16
|
63
|
Chris@16
|
64 private:
|
Chris@16
|
65 //////////////////////////////////////////////////////////////////////////
|
Chris@16
|
66 virtual void initiate_impl()
|
Chris@16
|
67 {
|
Chris@16
|
68 machine_base::initiate();
|
Chris@16
|
69 }
|
Chris@16
|
70
|
Chris@16
|
71 virtual void process_event_impl( const event_base & evt )
|
Chris@16
|
72 {
|
Chris@16
|
73 machine_base::process_event( evt );
|
Chris@16
|
74 }
|
Chris@16
|
75
|
Chris@16
|
76 virtual void terminate_impl()
|
Chris@16
|
77 {
|
Chris@16
|
78 machine_base::terminate();
|
Chris@16
|
79 }
|
Chris@16
|
80 };
|
Chris@16
|
81
|
Chris@16
|
82
|
Chris@16
|
83
|
Chris@16
|
84 } // namespace statechart
|
Chris@16
|
85 } // namespace boost
|
Chris@16
|
86
|
Chris@16
|
87
|
Chris@16
|
88
|
Chris@16
|
89 #endif
|