ossrv_pub/boost_apis/boost/statechart/state.hpp
changeset 0 e4d67989cc36
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ossrv_pub/boost_apis/boost/statechart/state.hpp	Tue Feb 02 02:01:42 2010 +0200
@@ -0,0 +1,102 @@
+#ifndef BOOST_STATECHART_STATE_HPP_INCLUDED
+#define BOOST_STATECHART_STATE_HPP_INCLUDED
+//////////////////////////////////////////////////////////////////////////////
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//////////////////////////////////////////////////////////////////////////////
+
+
+
+#include <boost/statechart/simple_state.hpp>
+
+#include <boost/mpl/list.hpp>
+
+
+
+namespace boost
+{
+namespace statechart
+{
+
+
+
+template< class MostDerived,
+          class Context,
+          class InnerInitial = mpl::list<>,
+          history_mode historyMode = has_no_history >
+class state : public simple_state<
+  MostDerived, Context, InnerInitial, historyMode >
+{
+  typedef simple_state< MostDerived, Context, InnerInitial, historyMode >
+    base_type;
+
+  protected:
+    //////////////////////////////////////////////////////////////////////////
+    struct my_context
+    {
+      my_context( typename base_type::context_ptr_type pContext ) :
+        pContext_( pContext )
+      {
+      }
+
+      typename base_type::context_ptr_type pContext_;
+    };
+
+    typedef state my_base;
+
+    state( my_context ctx )
+    {
+      this->set_context( ctx.pContext_ );
+    }
+
+    ~state() {}
+
+  public:
+    //////////////////////////////////////////////////////////////////////////
+    // The following declarations should be private.
+    // They are only public because many compilers lack template friends.
+    //////////////////////////////////////////////////////////////////////////
+    // See base class for documentation
+    typedef typename base_type::outermost_context_base_type
+      outermost_context_base_type;
+    typedef typename base_type::inner_context_ptr_type inner_context_ptr_type;
+    typedef typename base_type::context_ptr_type context_ptr_type;
+    typedef typename base_type::inner_initial_list inner_initial_list;
+
+    static void initial_deep_construct(
+      outermost_context_base_type & outermostContextBase )
+    {
+      deep_construct( &outermostContextBase, outermostContextBase );
+    }
+
+    // See base class for documentation
+    static void deep_construct(
+      const context_ptr_type & pContext,
+      outermost_context_base_type & outermostContextBase )
+    {
+      const inner_context_ptr_type pInnerContext(
+        shallow_construct( pContext, outermostContextBase ) );
+      base_type::template deep_construct_inner< inner_initial_list >(
+        pInnerContext, outermostContextBase );
+    }
+
+    static inner_context_ptr_type shallow_construct(
+      const context_ptr_type & pContext,
+      outermost_context_base_type & outermostContextBase )
+    {
+      const inner_context_ptr_type pInnerContext(
+        new MostDerived( my_context( pContext ) ) );
+      outermostContextBase.add( pInnerContext );
+      return pInnerContext;
+    }
+};
+
+
+
+} // namespace statechart
+} // namespace boost
+
+
+
+#endif