Mercurial > hg > vamp-build-and-test
diff DEPENDENCIES/generic/include/boost/msm/front/row2.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DEPENDENCIES/generic/include/boost/msm/front/row2.hpp Tue Aug 05 11:11:38 2014 +0100 @@ -0,0 +1,204 @@ +// 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_ROW2_HPP +#define BOOST_MSM_ROW2_HPP + +#include <boost/type_traits/is_base_of.hpp> +#include <boost/mpl/bool.hpp> +#include <boost/fusion/include/at_key.hpp> +#include <boost/msm/back/common_types.hpp> +#include <boost/msm/row_tags.hpp> +#include <boost/msm/front/detail/row2_helper.hpp> + +namespace boost { namespace msm { namespace front +{ + template< + typename T1 + , class Event + , typename T2 + > + struct _row2 + { + typedef _row_tag row_type_tag; + typedef T1 Source; + typedef T2 Target; + typedef Event Evt; + }; + + template< + typename T1 + , class Event + , typename T2 + , typename CalledForAction + , void (CalledForAction::*action)(Event const&) + > + struct a_row2 + { + typedef a_row_tag row_type_tag; + typedef T1 Source; + typedef T2 Target; + typedef Event Evt; + template <class FSM,class SourceState,class TargetState,class AllStates> + static ::boost::msm::back::HandledEnum action_call(FSM& fsm,Event const& evt,SourceState& src,TargetState& tgt, + AllStates& all_states) + { + // in this front-end, we don't need to know source and target states + ::boost::msm::front::detail::row2_action_helper<CalledForAction,Event,action>::template call_helper + (fsm,evt,src,tgt,all_states, + ::boost::mpl::bool_< ::boost::is_base_of<CalledForAction,FSM>::type::value>()); + return ::boost::msm::back::HANDLED_TRUE; + } + }; + + template< + typename T1 + , class Event + , typename T2 + , typename CalledForAction + , void (CalledForAction::*action)(Event const&) + , typename CalledForGuard + , bool (CalledForGuard::*guard)(Event const&) + > + struct row2 + { + typedef row_tag row_type_tag; + typedef T1 Source; + typedef T2 Target; + typedef Event Evt; + template <class FSM,class SourceState,class TargetState, class AllStates> + static ::boost::msm::back::HandledEnum action_call(FSM& fsm,Event const& evt,SourceState& src,TargetState& tgt, + AllStates& all_states) + { + // in this front-end, we don't need to know source and target states + ::boost::msm::front::detail::row2_action_helper<CalledForAction,Event,action>::call_helper + (fsm,evt,src,tgt,all_states, + ::boost::mpl::bool_< ::boost::is_base_of<CalledForAction,FSM>::type::value>()); + return ::boost::msm::back::HANDLED_TRUE; + } + template <class FSM,class SourceState,class TargetState,class AllStates> + static bool guard_call(FSM& fsm,Event const& evt,SourceState& src,TargetState& tgt, + AllStates& all_states) + { + // in this front-end, we don't need to know source and target states + return ::boost::msm::front::detail::row2_guard_helper<CalledForGuard,Event,guard>::call_helper + (fsm,evt,src,tgt,all_states, + ::boost::mpl::bool_< ::boost::is_base_of<CalledForGuard,FSM>::type::value>()); + } + }; + template< + typename T1 + , class Event + , typename T2 + , typename CalledForGuard + , bool (CalledForGuard::*guard)(Event const&) + > + struct g_row2 + { + typedef g_row_tag row_type_tag; + typedef T1 Source; + typedef T2 Target; + typedef Event Evt; + template <class FSM,class SourceState,class TargetState,class AllStates> + static bool guard_call(FSM& fsm,Event const& evt,SourceState& src,TargetState& tgt, + AllStates& all_states) + { + // in this front-end, we don't need to know source and target states + return ::boost::msm::front::detail::row2_guard_helper<CalledForGuard,Event,guard>::call_helper + (fsm,evt,src,tgt,all_states, + ::boost::mpl::bool_< ::boost::is_base_of<CalledForGuard,FSM>::type::value>()); + } + }; + // internal transitions + template< + typename T1 + , class Event + , typename CalledForAction + , void (CalledForAction::*action)(Event const&) + > + struct a_irow2 + { + typedef a_irow_tag row_type_tag; + typedef T1 Source; + typedef T1 Target; + typedef Event Evt; + template <class FSM,class SourceState,class TargetState,class AllStates> + static ::boost::msm::back::HandledEnum action_call(FSM& fsm,Event const& evt,SourceState& src,TargetState& tgt, + AllStates& all_states) + { + // in this front-end, we don't need to know source and target states + ::boost::msm::front::detail::row2_action_helper<CalledForAction,Event,action>::call_helper + (fsm,evt,src,tgt,all_states, + ::boost::mpl::bool_< ::boost::is_base_of<CalledForAction,FSM>::type::value>()); + return ::boost::msm::back::HANDLED_TRUE; + } + }; + + template< + typename T1 + , class Event + , typename CalledForAction + , void (CalledForAction::*action)(Event const&) + , typename CalledForGuard + , bool (CalledForGuard::*guard)(Event const&) + > + struct irow2 + { + typedef irow_tag row_type_tag; + typedef T1 Source; + typedef T1 Target; + typedef Event Evt; + template <class FSM,class SourceState,class TargetState,class AllStates> + static ::boost::msm::back::HandledEnum action_call(FSM& fsm,Event const& evt,SourceState& src,TargetState& tgt, + AllStates& all_states) + { + // in this front-end, we don't need to know source and target states + ::boost::msm::front::detail::row2_action_helper<CalledForAction,Event,action>::call_helper + (fsm,evt,src,tgt,all_states, + ::boost::mpl::bool_< ::boost::is_base_of<CalledForAction,FSM>::type::value>()); + return ::boost::msm::back::HANDLED_TRUE; + } + template <class FSM,class SourceState,class TargetState,class AllStates> + static bool guard_call(FSM& fsm,Event const& evt,SourceState& src,TargetState& tgt, + AllStates& all_states) + { + // in this front-end, we don't need to know source and target states + return ::boost::msm::front::detail::row2_guard_helper<CalledForGuard,Event,guard>::call_helper + (fsm,evt,src,tgt,all_states, + ::boost::mpl::bool_< ::boost::is_base_of<CalledForGuard,FSM>::type::value>()); + } + }; + template< + typename T1 + , class Event + , typename CalledForGuard + , bool (CalledForGuard::*guard)(Event const&) + > + struct g_irow2 + { + typedef g_irow_tag row_type_tag; + typedef T1 Source; + typedef T1 Target; + typedef Event Evt; + template <class FSM,class SourceState,class TargetState,class AllStates> + static bool guard_call(FSM& fsm,Event const& evt,SourceState& src,TargetState& tgt, + AllStates& all_states) + { + // in this front-end, we don't need to know source and target states + return ::boost::msm::front::detail::row2_guard_helper<CalledForGuard,Event,guard>::call_helper + (fsm,evt,src,tgt,all_states, + ::boost::mpl::bool_< ::boost::is_base_of<CalledForGuard,FSM>::type::value>()); + } + }; + +}}} + +#endif //BOOST_MSM_ROW2_HPP +