1 #ifndef BOOST_STATECHART_TEST_INNERMOST_DEFAULT_HPP_INCLUDED 2 #define BOOST_STATECHART_TEST_INNERMOST_DEFAULT_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 13 14 15 namespace sc = boost::statechart; 16 17 18 19 ////////////////////////////////////////////////////////////////////////////// 20 template< class MostDerived, class Context > 21 struct InnermostDefault : sc::state< MostDerived, Context > 22 { 23 typedef sc::state< MostDerived, Context > base_type; 24 typedef typename base_type::my_context my_context; 25 typedef InnermostDefault my_base; 26 InnermostDefaultInnermostDefault27 InnermostDefault( my_context ctx ) : base_type( ctx ) 28 { 29 this->outermost_context().template ActualEntry< MostDerived >(); 30 } 31 ~InnermostDefaultInnermostDefault32 ~InnermostDefault() 33 { 34 this->outermost_context().template ActualDestructor< MostDerived >(); 35 } 36 exitInnermostDefault37 void exit() 38 { 39 this->outermost_context().template ActualExitFunction< MostDerived >(); 40 } 41 }; 42 43 ////////////////////////////////////////////////////////////////////////////// 44 template< class Context > 45 struct Default0 : InnermostDefault< 46 Default0< Context >, typename Context::template orthogonal< 0 > > 47 { 48 typedef InnermostDefault< 49 Default0, typename Context::template orthogonal< 0 > > base_type; 50 typedef typename base_type::my_context my_context; 51 Default0Default052 Default0( my_context ctx ) : base_type( ctx ) {} 53 }; 54 55 ////////////////////////////////////////////////////////////////////////////// 56 template< class Context > 57 struct Default1 : InnermostDefault< 58 Default1< Context >, typename Context::template orthogonal< 1 > > 59 { 60 typedef InnermostDefault< 61 Default1, typename Context::template orthogonal< 1 > > base_type; 62 typedef typename base_type::my_context my_context; 63 Default1Default164 Default1( my_context ctx ) : base_type( ctx ) {} 65 }; 66 67 ////////////////////////////////////////////////////////////////////////////// 68 template< class Context > 69 struct Default2 : InnermostDefault< 70 Default2< Context >, typename Context::template orthogonal< 2 > > 71 { 72 typedef InnermostDefault< 73 Default2, typename Context::template orthogonal< 2 > > base_type; 74 typedef typename base_type::my_context my_context; 75 Default2Default276 Default2( my_context ctx ) : base_type( ctx ) {} 77 }; 78 79 80 81 #endif 82