]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/statechart/include/boost/statechart/in_state_reaction.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / statechart / include / boost / statechart / in_state_reaction.hpp
CommitLineData
7c673cae
FG
1#ifndef BOOST_STATECHART_IN_STATE_REACTION_HPP_INCLUDED
2#define BOOST_STATECHART_IN_STATE_REACTION_HPP_INCLUDED
3//////////////////////////////////////////////////////////////////////////////
4// Copyright 2005-2008 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/result.hpp>
12
13#include <boost/statechart/detail/reaction_dispatcher.hpp>
14
15
16
17namespace boost
18{
19namespace statechart
20{
21
22
23
24class event_base;
25
26//////////////////////////////////////////////////////////////////////////////
27template< class Event,
28 class ReactionContext = detail::no_context< Event >,
29 void ( ReactionContext::*pAction )( const Event & ) =
30 &detail::no_context< Event >::no_function >
31class in_state_reaction
32{
33 private:
34 //////////////////////////////////////////////////////////////////////////
35 template< class State >
36 struct reactions
37 {
38 static result react_without_action( State & stt )
39 {
40 return stt.discard_event();
41 }
42
43 static result react_with_action( State & stt, const Event & evt )
44 {
45 ( stt.template context< ReactionContext >().*pAction )( evt );
46 return react_without_action( stt );
47 }
48 };
49
50 public:
51 //////////////////////////////////////////////////////////////////////////
52 // The following declarations should be private.
53 // They are only public because many compilers lack template friends.
54 //////////////////////////////////////////////////////////////////////////
55 template< class State, class EventBase, class IdType >
56 static detail::reaction_result react(
57 State & stt, const EventBase & evt, const IdType & eventType )
58 {
59 typedef detail::reaction_dispatcher<
60 reactions< State >, State, EventBase, Event, ReactionContext, IdType
61 > dispatcher;
62 return dispatcher::react( stt, evt, eventType );
63 }
64};
65
66
67
68} // namespace statechart
69} // namespace boost
70
71
72
73#endif