annotate DEPENDENCIES/generic/include/boost/statechart/result.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1 #ifndef BOOST_STATECHART_RESULT_HPP_INCLUDED
Chris@16 2 #define BOOST_STATECHART_RESULT_HPP_INCLUDED
Chris@16 3 //////////////////////////////////////////////////////////////////////////////
Chris@16 4 // Copyright 2002-2010 Andreas Huber Doenni
Chris@16 5 // Distributed under the Boost Software License, Version 1.0. (See accompany-
Chris@16 6 // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 7 //////////////////////////////////////////////////////////////////////////////
Chris@16 8
Chris@16 9
Chris@16 10
Chris@16 11 #include <boost/assert.hpp>
Chris@16 12
Chris@16 13
Chris@16 14
Chris@16 15 namespace boost
Chris@16 16 {
Chris@16 17 namespace statechart
Chris@16 18 {
Chris@16 19 namespace detail
Chris@16 20 {
Chris@16 21
Chris@16 22
Chris@16 23
Chris@16 24 //////////////////////////////////////////////////////////////////////////////
Chris@16 25 enum reaction_result
Chris@16 26 {
Chris@16 27 no_reaction,
Chris@16 28 do_forward_event,
Chris@16 29 do_discard_event,
Chris@16 30 do_defer_event,
Chris@16 31 consumed
Chris@16 32 };
Chris@16 33
Chris@16 34 struct result_utility;
Chris@16 35
Chris@16 36 //////////////////////////////////////////////////////////////////////////////
Chris@16 37 class safe_reaction_result
Chris@16 38 {
Chris@16 39 public:
Chris@16 40 //////////////////////////////////////////////////////////////////////////
Chris@16 41 safe_reaction_result( const safe_reaction_result & other ) :
Chris@16 42 reactionResult_( other.reactionResult_ )
Chris@16 43 {
Chris@16 44 // This assert fails when an attempt is made to make multiple copies of
Chris@16 45 // a result value. This makes little sense, given the requirement that
Chris@16 46 // an obtained result value must be returned out of the react function.
Chris@16 47 BOOST_ASSERT( reactionResult_ != consumed );
Chris@16 48 other.reactionResult_ = consumed;
Chris@16 49 }
Chris@16 50
Chris@16 51 ~safe_reaction_result()
Chris@16 52 {
Chris@16 53 // This assert fails when an obtained result value is not returned out
Chris@16 54 // of the react() function. This can happen if the user accidentally
Chris@16 55 // makes more than one call to reaction functions inside react() or
Chris@16 56 // accidentally makes one or more calls to reaction functions outside
Chris@16 57 // react()
Chris@16 58 BOOST_ASSERT( reactionResult_ == consumed );
Chris@16 59 }
Chris@16 60
Chris@16 61 private:
Chris@16 62 //////////////////////////////////////////////////////////////////////////
Chris@16 63 safe_reaction_result( reaction_result reactionResult ) :
Chris@16 64 reactionResult_( reactionResult )
Chris@16 65 {
Chris@16 66 }
Chris@16 67
Chris@16 68 operator reaction_result() const
Chris@16 69 {
Chris@16 70 const reaction_result val = reactionResult_;
Chris@16 71 reactionResult_ = consumed;
Chris@16 72 return val;
Chris@16 73 }
Chris@16 74
Chris@16 75 safe_reaction_result & operator=( const safe_reaction_result & );
Chris@16 76
Chris@16 77 mutable reaction_result reactionResult_;
Chris@16 78
Chris@16 79 friend struct result_utility;
Chris@16 80 };
Chris@16 81
Chris@16 82
Chris@16 83
Chris@16 84 } // namespace detail
Chris@16 85
Chris@16 86
Chris@16 87
Chris@16 88 #ifdef NDEBUG
Chris@16 89 typedef detail::reaction_result result;
Chris@16 90 #else
Chris@16 91 typedef detail::safe_reaction_result result;
Chris@16 92 #endif
Chris@16 93
Chris@16 94
Chris@16 95 namespace detail
Chris@16 96 {
Chris@16 97
Chris@16 98
Chris@16 99
Chris@16 100 //////////////////////////////////////////////////////////////////////////////
Chris@16 101 struct result_utility
Chris@16 102 {
Chris@16 103 static ::boost::statechart::result make_result( reaction_result value )
Chris@16 104 {
Chris@16 105 return value;
Chris@16 106 }
Chris@16 107
Chris@16 108 static reaction_result get_result( ::boost::statechart::result value )
Chris@16 109 {
Chris@16 110 return value;
Chris@16 111 }
Chris@16 112 };
Chris@16 113
Chris@16 114
Chris@16 115
Chris@16 116 } // namespace detail
Chris@16 117 } // namespace statechart
Chris@16 118 } // namespace boost
Chris@16 119
Chris@16 120
Chris@16 121
Chris@16 122 #endif