Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_34_1/boost/statechart/result.hpp @ 29

Last change on this file since 29 was 29, checked in by landauf, 16 years ago

updated boost from 1_33_1 to 1_34_1

File size: 2.8 KB
RevLine 
[29]1#ifndef BOOST_STATECHART_RESULT_HPP_INCLUDED
2#define BOOST_STATECHART_RESULT_HPP_INCLUDED
3//////////////////////////////////////////////////////////////////////////////
4// Copyright 2002-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/assert.hpp>
12
13
14
15namespace boost
16{
17namespace statechart
18{
19namespace detail
20{
21
22
23
24//////////////////////////////////////////////////////////////////////////////
25enum reaction_result
26{
27  no_reaction,
28  do_forward_event,
29  do_discard_event,
30  do_defer_event,
31  consumed
32};
33
34struct result_utility;
35
36//////////////////////////////////////////////////////////////////////////////
37class safe_reaction_result
38{
39  public:
40    //////////////////////////////////////////////////////////////////////////
41    safe_reaction_result( const safe_reaction_result & other ) :
42      reactionResult( other.reactionResult )
43    {
44      // This assert fails when an attempt is made to make multiple copies of
45      // a result value. This makes little sense, given the requirement that
46      // an obtained result value must be returned out of the react function.
47      BOOST_ASSERT( reactionResult != consumed );
48      other.reactionResult = consumed;
49    }
50
51    ~safe_reaction_result()
52    {
53      // This assert fails when an obtained result value is not returned out
54      // of the react() function. This can happen if the user accidentally
55      // makes more than one call to reaction functions inside react() or
56      // accidentally makes one or more calls to reaction functions outside
57      // react()
58      BOOST_ASSERT( reactionResult == consumed );
59    }
60
61  private:
62    //////////////////////////////////////////////////////////////////////////
63    safe_reaction_result( reaction_result reactionResult ) :
64      reactionResult( reactionResult )
65    {
66    }
67
68    operator reaction_result() const
69    {
70      const reaction_result val = reactionResult;
71      reactionResult = consumed;
72      return val;
73    }
74
75    safe_reaction_result & operator=( const safe_reaction_result & );
76
77    mutable reaction_result reactionResult;
78
79    friend struct result_utility;
80};
81
82
83
84} // namespace detail
85
86
87
88#ifdef NDEBUG
89  typedef detail::reaction_result result;
90#else
91  typedef detail::safe_reaction_result result;
92#endif
93
94
95namespace detail
96{
97
98
99
100//////////////////////////////////////////////////////////////////////////////
101struct result_utility
102{
103  static ::boost::statechart::result make_result( reaction_result value )
104  {
105    return value;
106  }
107
108  static reaction_result get_result( ::boost::statechart::result value )
109  {
110    return value;
111  }
112};
113
114
115
116} // namespace detail
117} // namespace statechart
118} // namespace boost
119
120
121
122#endif
Note: See TracBrowser for help on using the repository browser.