$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r59658 - sandbox/msm/boost/msm/front/euml
From: christophe.j.henry_at_[hidden]
Date: 2010-02-12 08:22:08
Author: chenry
Date: 2010-02-12 08:22:07 EST (Fri, 12 Feb 2010)
New Revision: 59658
URL: http://svn.boost.org/trac/boost/changeset/59658
Log:
added support for internal_transition_table in eUML
Text files modified: 
   sandbox/msm/boost/msm/front/euml/stt_grammar.hpp |    39 +++++++++++++++++++++++++++++++++++++-- 
   1 files changed, 37 insertions(+), 2 deletions(-)
Modified: sandbox/msm/boost/msm/front/euml/stt_grammar.hpp
==============================================================================
--- sandbox/msm/boost/msm/front/euml/stt_grammar.hpp	(original)
+++ sandbox/msm/boost/msm/front/euml/stt_grammar.hpp	2010-02-12 08:22:07 EST (Fri, 12 Feb 2010)
@@ -40,7 +40,12 @@
     typedef Row<typename TEMP_ROW::Source,typename TEMP_ROW::Evt,typename TEMP_ROW::Target,
                 typename TEMP_ROW::Action,typename TEMP_ROW::Guard> type;
 };
-
+template <class TEMP_ROW>
+struct convert_to_internal_row
+{
+    typedef Internal<typename TEMP_ROW::Evt,
+                     typename TEMP_ROW::Action,typename TEMP_ROW::Guard> type;
+};
 // row grammar
 struct BuildNextStates
    : proto::or_<
@@ -202,7 +207,6 @@
    >
 {};
 
-
 template <class Expr>
 typename ::boost::mpl::eval_if<
     typename proto::matches<Expr,BuildStt>::type,
@@ -213,6 +217,37 @@
     return typename boost::result_of<BuildStt(Expr)>::type();
 }
 
+// internal stt grammar
+struct BuildInternalRow
+    :   proto::when<
+            BuildEvent,
+            convert_to_internal_row<
+                fusion_left_right<TempRow<none,none,none>,BuildEvent(proto::_)> >()
+        >
+{};
+struct BuildInternalStt
+   : proto::or_<
+        proto::when<
+                    proto::comma<BuildInternalStt,BuildInternalStt>,
+                    boost::mpl::push_back<BuildInternalStt(proto::_left),BuildInternalRow(proto::_right)>()
+                >,
+        proto::when <
+                    BuildInternalRow,
+                    make_vector_one_row<BuildInternalRow(proto::_)>()
+        >
+   >
+{};
+
+template <class Expr>
+typename ::boost::mpl::eval_if<
+    typename proto::matches<Expr,BuildInternalStt>::type,
+    boost::result_of<BuildInternalStt(Expr)>,
+    make_invalid_type>::type
+build_internal_stt(Expr const& expr)
+{
+    return typename boost::result_of<BuildInternalStt(Expr)>::type();
+}
+
 
 }}}}
 #endif //BOOST_MSM_FRONT_EUML_STT_GRAMMAR_H