/usr/include/boost/msm/front/states.hpp is in libboost1.54-dev 1.54.0-4ubuntu3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | // Copyright 2008 Christophe Henry
// henry UNDERSCORE christophe AT hotmail DOT com
// This is an extended version of the state machine available in the boost::mpl library
// Distributed under the same license as the original.
// Copyright for the original version:
// Copyright 2005 David Abrahams and Aleksey Gurtovoy. Distributed
// under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
#ifndef BOOST_MSM_FRONT_STATES_H
#define BOOST_MSM_FRONT_STATES_H
#include <boost/mpl/bool.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/msm/front/common_states.hpp>
#include <boost/msm/row_tags.hpp>
namespace boost { namespace msm { namespace front
{
struct no_sm_ptr
{
// tags
typedef ::boost::mpl::bool_<false> needs_sm;
};
struct sm_ptr
{
// tags
typedef ::boost::mpl::bool_<true> needs_sm;
};
// kept for backward compatibility
struct NoSMPtr
{
// tags
typedef ::boost::mpl::bool_<false> needs_sm;
};
struct SMPtr
{
// tags
typedef ::boost::mpl::bool_<true> needs_sm;
};
// provides the typedefs and interface. Concrete states derive from it.
// template argument: pointer-to-fsm policy
template<class BASE = default_base_state,class SMPtrPolicy = no_sm_ptr>
struct state : public boost::msm::front::detail::state_base<BASE>, SMPtrPolicy
{
// tags
// default: no flag
typedef ::boost::mpl::vector0<> flag_list;
typedef ::boost::mpl::vector0<> internal_flag_list;
//default: no deferred events
typedef ::boost::mpl::vector0<> deferred_events;
};
// terminate state simply defines the TerminateFlag flag
// template argument: pointer-to-fsm policy
template<class BASE = default_base_state,class SMPtrPolicy = no_sm_ptr>
struct terminate_state : public boost::msm::front::detail::state_base<BASE>, SMPtrPolicy
{
// tags
typedef ::boost::mpl::vector0<> flag_list;
typedef ::boost::mpl::vector< boost::msm::TerminateFlag> internal_flag_list;
//default: no deferred events
typedef ::boost::mpl::vector0<> deferred_events;
};
// terminate state simply defines the InterruptedFlag and EndInterruptFlag<EndInterruptEvent> flags
// template argument: event which ends the interrupt
// template argument: pointer-to-fsm policy
template <class EndInterruptEvent,class BASE = default_base_state,class SMPtrPolicy = no_sm_ptr>
struct interrupt_state : public boost::msm::front::detail::state_base<BASE>, SMPtrPolicy
{
// tags
typedef ::boost::mpl::vector0<> flag_list;
typedef ::boost::mpl::vector<boost::msm::InterruptedFlag,
boost::msm::EndInterruptFlag<EndInterruptEvent> >
internal_flag_list;
//default: no deferred events
typedef ::boost::mpl::vector0<> deferred_events;
};
// not a state but a bunch of extra typedefs to handle direct entry into a composite state. To be derived from
// template argument: zone index of this state
template <int ZoneIndex=-1>
struct explicit_entry
{
typedef int explicit_entry_state;
enum {zone_index=ZoneIndex};
};
// to be derived from. Makes a type an entry (pseudo) state. Actually an almost full-fledged state
// template argument: containing composite
// template argument: zone index of this state
// template argument: pointer-to-fsm policy
template<int ZoneIndex=-1,class BASE = default_base_state,class SMPtrPolicy = no_sm_ptr>
struct entry_pseudo_state
: public boost::msm::front::detail::state_base<BASE>,SMPtrPolicy
{
// tags
typedef int pseudo_entry;
enum {zone_index=ZoneIndex};
typedef int explicit_entry_state;
// default: no flag
typedef ::boost::mpl::vector0<> flag_list;
typedef ::boost::mpl::vector0<> internal_flag_list;
//default: no deferred events
typedef ::boost::mpl::vector0<> deferred_events;
};
// to be derived from. Makes a state an exit (pseudo) state. Actually an almost full-fledged state
// template argument: event to forward
// template argument: pointer-to-fsm policy
template<class Event,class BASE = default_base_state,class SMPtrPolicy = no_sm_ptr>
struct exit_pseudo_state : public boost::msm::front::detail::state_base<BASE> , SMPtrPolicy
{
typedef Event event;
typedef BASE Base;
typedef SMPtrPolicy PtrPolicy;
typedef int pseudo_exit;
// default: no flag
typedef ::boost::mpl::vector0<> flag_list;
typedef ::boost::mpl::vector0<> internal_flag_list;
//default: no deferred events
typedef ::boost::mpl::vector0<> deferred_events;
};
}}}
#endif //BOOST_MSM_FRONT_STATES_H
|