• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 #ifndef BOOST_FSM_TRANSITION_INCLUDED
3 #define BOOST_FSM_TRANSITION_INCLUDED
4 
5 // Copyright Aleksey Gurtovoy 2002-2004
6 //
7 // Distributed under the Boost Software License, Version 1.0.
8 // (See accompanying file LICENSE_1_0.txt or copy at
9 // http://www.boost.org/LICENSE_1_0.txt)
10 //
11 // See http://www.boost.org/libs/mpl for documentation.
12 
13 // $Id$
14 // $Date$
15 // $Revision$
16 
17 #include <cassert>
18 
19 namespace fsm { namespace aux {
20 
21 // represent a signle transition between states |From| and |To|
22 
23 template<
24       typename T
25     , typename From
26     , typename Event
27     , typename To
28     , bool (T::* transition_func)(Event const&)
29     >
30 struct transition
31 {
32     typedef T       fsm_t;
33     typedef From    from_state_t;
34     typedef Event   event_t;
35     typedef To      to_state_t;
36 
37     typedef typename Event::base_t  base_event_t;
do_transitionfsm::aux::transition38     static bool do_transition(T& x, base_event_t const& e)
39     {
40         assert(dynamic_cast<event_t const*>(&e) == &e);
41         return (x.*transition_func)(static_cast<event_t const &>(e));
42     }
43 };
44 
45 }}
46 
47 #endif // BOOST_FSM_TRANSITION_INCLUDED
48