1 #ifndef BOOST_STATECHART_TEST_OUTER_ORTHOGONAL_HPP_INCLUDED 2 #define BOOST_STATECHART_TEST_OUTER_ORTHOGONAL_HPP_INCLUDED 3 ////////////////////////////////////////////////////////////////////////////// 4 // Copyright 2004-2006 Andreas Huber Doenni 5 // Distributed under the Boost Software License, Version 1.0. (See accompany- 6 // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 7 ////////////////////////////////////////////////////////////////////////////// 8 9 10 11 #include <boost/statechart/state.hpp> 12 #include <boost/mpl/list.hpp> 13 14 #include "InnermostDefault.hpp" 15 16 17 18 namespace sc = boost::statechart; 19 namespace mpl = boost::mpl; 20 21 22 23 ////////////////////////////////////////////////////////////////////////////// 24 template< class MostDerived, class Context, class InitialState0 > 25 struct Orthogonal0 : sc::state< MostDerived, Context, 26 mpl::list< 27 InitialState0, 28 Default1< MostDerived >, 29 Default2< MostDerived > > > 30 { 31 typedef sc::state< 32 MostDerived, Context, mpl::list< InitialState0, 33 Default1< MostDerived >, Default2< MostDerived > > > base_type; 34 typedef typename base_type::my_context my_context; 35 typedef Orthogonal0 my_base; 36 Orthogonal0Orthogonal037 Orthogonal0( my_context ctx ) : base_type( ctx ) 38 { 39 this->outermost_context().template ActualEntry< MostDerived >(); 40 } 41 ~Orthogonal0Orthogonal042 ~Orthogonal0() 43 { 44 this->outermost_context().template ActualDestructor< MostDerived >(); 45 } 46 exitOrthogonal047 void exit() 48 { 49 this->outermost_context().template ActualExitFunction< MostDerived >(); 50 } 51 }; 52 53 ////////////////////////////////////////////////////////////////////////////// 54 template< class MostDerived, class Context, class InitialState1 > 55 struct Orthogonal1 : sc::state< MostDerived, Context, 56 mpl::list< 57 Default0< MostDerived >, 58 InitialState1, 59 Default2< MostDerived > > > 60 { 61 typedef sc::state< 62 MostDerived, Context, mpl::list< Default0< MostDerived >, 63 InitialState1, Default2< MostDerived > > > base_type; 64 typedef typename base_type::my_context my_context; 65 typedef Orthogonal1 my_base; 66 Orthogonal1Orthogonal167 Orthogonal1( my_context ctx ) : base_type( ctx ) 68 { 69 this->outermost_context().template ActualEntry< MostDerived >(); 70 } 71 ~Orthogonal1Orthogonal172 ~Orthogonal1() 73 { 74 this->outermost_context().template ActualDestructor< MostDerived >(); 75 } 76 exitOrthogonal177 void exit() 78 { 79 this->outermost_context().template ActualExitFunction< MostDerived >(); 80 } 81 }; 82 83 ////////////////////////////////////////////////////////////////////////////// 84 template< class MostDerived, class Context, class InitialState2 > 85 struct Orthogonal2 : sc::state< MostDerived, Context, 86 mpl::list< 87 Default0< MostDerived >, 88 Default1< MostDerived >, 89 InitialState2 > > 90 { 91 typedef sc::state< 92 MostDerived, Context, mpl::list< Default0< MostDerived >, 93 Default1< MostDerived >, InitialState2 > > base_type; 94 typedef typename base_type::my_context my_context; 95 typedef Orthogonal2 my_base; 96 Orthogonal2Orthogonal297 Orthogonal2( my_context ctx ) : base_type( ctx ) 98 { 99 this->outermost_context().template ActualEntry< MostDerived >(); 100 } 101 ~Orthogonal2Orthogonal2102 ~Orthogonal2() 103 { 104 this->outermost_context().template ActualDestructor< MostDerived >(); 105 } 106 exitOrthogonal2107 void exit() 108 { 109 this->outermost_context().template ActualExitFunction< MostDerived >(); 110 } 111 }; 112 113 114 115 #endif 116