$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r78404 - sandbox/variadic_templates/boost/composite_storage/pack/multiple_dispatch
From: cppljevans_at_[hidden]
Date: 2012-05-10 11:27:59
Author: cppljevans
Date: 2012-05-10 11:27:56 EDT (Thu, 10 May 2012)
New Revision: 78404
URL: http://svn.boost.org/trac/boost/changeset/78404
Log:
Replaced reifier_{switch,funvec} with revised
reifier_indexed_base(renamed to reifier_indexed)
and new template, dispatch_indexes, in 
functor_indexed.hpp.
Added:
   sandbox/variadic_templates/boost/composite_storage/pack/multiple_dispatch/reifier_indexed.hpp
      - copied, changed from r78360, /sandbox/variadic_templates/boost/composite_storage/pack/multiple_dispatch/reifier_indexed_base.hpp
Removed:
   sandbox/variadic_templates/boost/composite_storage/pack/multiple_dispatch/reifier_funvec.hpp
   sandbox/variadic_templates/boost/composite_storage/pack/multiple_dispatch/reifier_indexed_base.hpp
   sandbox/variadic_templates/boost/composite_storage/pack/multiple_dispatch/reifier_switch.hpp
Text files modified: 
   sandbox/variadic_templates/boost/composite_storage/pack/multiple_dispatch/reifier_base.hpp    |    27 +++++++++++------------                 
   sandbox/variadic_templates/boost/composite_storage/pack/multiple_dispatch/reifier_indexed.hpp |    46 ++++++++++++++++++++++++--------------- 
   sandbox/variadic_templates/boost/composite_storage/pack/multiple_dispatch/reify_apply.hpp     |     2                                         
   3 files changed, 42 insertions(+), 33 deletions(-)
Modified: sandbox/variadic_templates/boost/composite_storage/pack/multiple_dispatch/reifier_base.hpp
==============================================================================
--- sandbox/variadic_templates/boost/composite_storage/pack/multiple_dispatch/reifier_base.hpp	(original)
+++ sandbox/variadic_templates/boost/composite_storage/pack/multiple_dispatch/reifier_base.hpp	2012-05-10 11:27:56 EDT (Thu, 10 May 2012)
@@ -41,17 +41,9 @@
     >
   >
   /**@brief
-   *  Uses switch statment (in functor_indexed::apply)
-   *  to convert HeadAbstract, which should be of type,
-   *  a composite_storage<one_of_maybe, _, TailConcrete...>, 
-   *  to one of the TailConcretes, and then call
-   *  a ReifyApply with the converted ptrs_target_source.
+   *  See push_back_concrete member template function.
    */
 {
-        typedef
-      HeadAbstract
-    head_abstract_t
-    ;
       ReifyApply const&
     my_reify
     ;
@@ -60,7 +52,7 @@
       < mpl::package
         < HeadConcrete...
         >
-      , head_abstract_t
+      , HeadAbstract
       , TailAbstract...
       >
     now_tar_src_type
@@ -76,8 +68,16 @@
     , my_tar_src(a_ptrs_tar_src)
     {
     }
+        typedef
+      HeadAbstract
+    head_abstract_t
+    ;
       head_abstract_t&
     head_abstract()const
+      /**@brief
+       *  The next abstract type to be converted
+       *  to it's concrete type.
+       */
     {
         return my_tar_src->template project
           < sizeof...(HeadConcrete)
@@ -95,10 +95,9 @@
       ( TailConcrete& a_tail_concrete
       )const
       /**@brief
-       *  Casts the head abstract value in the ptrs_target_source
-       *  into a TailConcrete value, and
-       *  then recurses on remaining abstract args
-       *  by calling on my_reify.
+       *  Casts the HeadAbstract* in the ptrs_target_source
+       *  into a TailConcrete*, and then recurses on
+       *  remaining abstract args, TailAbstract..., using my_reify.
        */
     {
             typedef 
Deleted: sandbox/variadic_templates/boost/composite_storage/pack/multiple_dispatch/reifier_funvec.hpp
==============================================================================
--- sandbox/variadic_templates/boost/composite_storage/pack/multiple_dispatch/reifier_funvec.hpp	2012-05-10 11:27:56 EDT (Thu, 10 May 2012)
+++ (empty file)
@@ -1,170 +0,0 @@
-//
-#ifndef BOOST_COMPOSITE_STORAGE_PACK_MULTIPLE_DISPATCH_REIFIER_FUNVEC_HPP_INCLUDED
-#define BOOST_COMPOSITE_STORAGE_PACK_MULTIPLE_DISPATCH_REIFIER_FUNVEC_HPP_INCLUDED
-//  (C) Copyright Larry Evans 2010.
-//
-//  Permission to copy, use, modify, sell and distribute this software
-//  is granted provided this copyright notice appears in all copies
-//  This software is provided "as is" without express or implied
-//  warranty, and with no claim as to its suitability for any purpose.
-//
-#include <boost/composite_storage/pack/multiple_dispatch/reifier_indexed_base.hpp>
-
-namespace boost
-{
-namespace composite_storage
-{
-namespace pack
-{
-namespace multiple_dispatch
-{
-
-  template
-  < typename ReifyApply
-  , typename ArgsConcreteAbstract
-  >
-struct reifier_funvec
-: reifier_indexed_base
-  < ReifyApply
-  , ArgsConcreteAbstract
-  >
-  /**@brief
-   *  Uses vector of functions (see static our_vec() below)
-   *  to convert "abstract" head of an ArgsConcreteAbstract to
-   *  its "concrete" counterpart, and then call
-   *  a ReifyApply with the converted ArgsConcreteAbstract.
-   */
-{
-        typedef
-      reifier_indexed_base
-      < ReifyApply
-      , ArgsConcreteAbstract
-      >
-    super_t
-    ;
-    reifier_funvec
-      ( ReifyApply const& a_reify
-      , ArgsConcreteAbstract* a_ptrs_tar_src
-      )
-    : super_t
-      ( a_reify
-      , a_ptrs_tar_src
-      )
-    {
-    }
-        typedef 
-      typename ReifyApply::result_type 
-    result_type
-    ;
-        typedef
-      reifier_funvec
-      < ReifyApply
-      , ArgsConcreteAbstract
-      >
-    this_type
-    ;
-    template<class Case> 
-    struct fun_case
-    {
-            static
-          result_type 
-        _(this_type const& f)
-        {
-            Case arg;
-            return f(arg);
-        }
-    };
-        typedef
-      typename super_t::cases
-    cases
-    ;
-        typedef
-      typename super_t::case_type
-    case_type
-    ;
-    struct fun_vec
-    {
-            typedef
-          result_type
-          (*
-        fun_type
-          )(this_type const&)
-        ;
-            static
-          unsigned const
-        vec_size
-        = boost::mpl::size<cases>::type::value
-        ;
-            typedef
-          fun_type
-        vec_type
-          [ vec_size
-          ]
-        ;
-            static
-          unsigned
-        case_index
-          ( case_type index
-          )
-        {
-            return index-cases::start::value;
-        }
-        struct fill_vec
-        {
-              vec_type&
-            my_vec
-            ;
-            fill_vec(vec_type& a_vec)
-            : my_vec(a_vec)
-            {}
-              template
-              < typename Case
-              >
-              void
-            operator()(Case)
-            {
-                unsigned const index=case_index(Case::value);
-                my_vec[index]=fun_case<Case>::_;
-            }
-        };
-          vec_type
-        my_vec
-        ;
-        fun_vec(void)
-        {
-            boost::mpl::for_each<cases>(fill_vec(my_vec));
-        }
-          fun_type
-        operator[](case_type i)const
-        {
-            unsigned const index=case_index(i);
-            return my_vec[index];
-        }
-          
-    };
-        static
-      fun_vec const&
-    our_vec(void)
-    {
-        static fun_vec const a_vec;
-        return a_vec;
-    }
-      result_type
-    reify_rest
-      ( void
-      )const
-      /**@brief
-       *  Indirectly, calls this->super_t::operator()( mpl::integral_c<case_type,CaseValue> index)
-       *  where CaseValue == head_abstract().which().
-       */
-    {
-        return our_vec()[this->head_abstract().which()](*this);
-    }
-};
-
-}//exit namespace multiple_dispatch
-}//exit namespace pack
-
-}//exit composite_storage namespace
-}//exit boost namespace
-#endif
Copied: sandbox/variadic_templates/boost/composite_storage/pack/multiple_dispatch/reifier_indexed.hpp (from r78360, /sandbox/variadic_templates/boost/composite_storage/pack/multiple_dispatch/reifier_indexed_base.hpp)
==============================================================================
--- /sandbox/variadic_templates/boost/composite_storage/pack/multiple_dispatch/reifier_indexed_base.hpp	(original)
+++ sandbox/variadic_templates/boost/composite_storage/pack/multiple_dispatch/reifier_indexed.hpp	2012-05-10 11:27:56 EDT (Thu, 10 May 2012)
@@ -1,6 +1,6 @@
 //
-#ifndef BOOST_COMPOSITE_STORAGE_PACK_MULTIPLE_DISPATCH_REIFIER_INDEXED_BASE_HPP_INCLUDED
-#define BOOST_COMPOSITE_STORAGE_PACK_MULTIPLE_DISPATCH_REIFIER_INDEXED_BASE_HPP_INCLUDED
+#ifndef BOOST_COMPOSITE_STORAGE_PACK_MULTIPLE_DISPATCH_REIFIER_INDEXED_HPP_INCLUDED
+#define BOOST_COMPOSITE_STORAGE_PACK_MULTIPLE_DISPATCH_REIFIER_INDEXED_HPP_INCLUDED
 //  (C) Copyright Larry Evans 2010.
 //
 //  Permission to copy, use, modify, sell and distribute this software
@@ -24,7 +24,7 @@
   < typename ReifyApply
   , typename ArgsConcreteAbstract
   >
-struct reifier_indexed_base
+struct reifier_indexed
 : reifier_base
   < ReifyApply
   , ArgsConcreteAbstract
@@ -42,25 +42,21 @@
     head_abstract_t
     ;
         typedef
-      typename functor_indexed::layout_visitor
+      typename functor_indexed::layout_domain
       < head_abstract_t
       , typename head_abstract_t::index_undefined
       >
-    layout_visitor
+    layout_domain
     ;
         typedef
-      typename layout_visitor::case_type
-    case_type
+      typename layout_domain::index_type
+    index_type
     ;
         typedef
-      typename layout_visitor::cases
-    cases
+      typename layout_domain::indexes
+    indexes
     ;
-        typedef
-      typename head_abstract_t::index_type
-    index_type
-    ;
-    reifier_indexed_base
+    reifier_indexed
       ( ReifyApply const& a_reify
       , ArgsConcreteAbstract* a_ptrs_tar_src
       )
@@ -75,20 +71,20 @@
     result_type
     ;
       template
-      < case_type CaseValue
+      < index_type IndexValue
       >
       result_type 
     operator()
-      ( mpl::integral_c<case_type,CaseValue> index
+      ( mpl::integral_c<index_type,IndexValue> index
       )const
       /**@brief
        *  "Reifies" the head_abstract() into
-       *  the type indicated by the tag, CaseValue.
+       *  the type indicated by the tag, IndexValue.
        *  Then calls this->push_back_concrete.
        */
     {
           index_type const 
-        index_concrete=index_type(CaseValue);
+        index_concrete=index_type(IndexValue);
           typename super_t::head_abstract_t&
         my_head_abstract=this->head_abstract();
             typedef 
@@ -98,6 +94,20 @@
         return this->push_back_concrete(a_tail_concrete);
     }
         
+      result_type
+    reify_rest
+      ( void
+      )const
+      /**@brief
+       *  Indirectly, calls this->operator()( mpl::integral_c<index_type,IndexValue> index)
+       *  where IndexValue == head_abstract().which().
+       */
+    {
+        return functor_indexed::apply
+          ( *this
+          , this->head_abstract().which()
+          );
+    }
 };
 
 }//exit namespace multiple_dispatch
Deleted: sandbox/variadic_templates/boost/composite_storage/pack/multiple_dispatch/reifier_indexed_base.hpp
==============================================================================
--- sandbox/variadic_templates/boost/composite_storage/pack/multiple_dispatch/reifier_indexed_base.hpp	2012-05-10 11:27:56 EDT (Thu, 10 May 2012)
+++ (empty file)
@@ -1,108 +0,0 @@
-//
-#ifndef BOOST_COMPOSITE_STORAGE_PACK_MULTIPLE_DISPATCH_REIFIER_INDEXED_BASE_HPP_INCLUDED
-#define BOOST_COMPOSITE_STORAGE_PACK_MULTIPLE_DISPATCH_REIFIER_INDEXED_BASE_HPP_INCLUDED
-//  (C) Copyright Larry Evans 2010.
-//
-//  Permission to copy, use, modify, sell and distribute this software
-//  is granted provided this copyright notice appears in all copies.
-//  This software is provided "as is" without express or implied
-//  warranty, and with no claim as to its suitability for any purpose.
-//
-#include <boost/composite_storage/pack/multiple_dispatch/reifier_base.hpp>
-#include <boost/composite_storage/functor_indexed.hpp>
-
-namespace boost
-{
-namespace composite_storage
-{
-namespace pack
-{
-namespace multiple_dispatch
-{
-
-  template
-  < typename ReifyApply
-  , typename ArgsConcreteAbstract
-  >
-struct reifier_indexed_base
-: reifier_base
-  < ReifyApply
-  , ArgsConcreteAbstract
-  >
-{
-        typedef
-      reifier_base
-      < ReifyApply
-      , ArgsConcreteAbstract
-      >
-    super_t
-    ;
-        typedef
-      typename super_t::head_abstract_t
-    head_abstract_t
-    ;
-        typedef
-      typename functor_indexed::layout_visitor
-      < head_abstract_t
-      , typename head_abstract_t::index_undefined
-      >
-    layout_visitor
-    ;
-        typedef
-      typename layout_visitor::case_type
-    case_type
-    ;
-        typedef
-      typename layout_visitor::cases
-    cases
-    ;
-        typedef
-      typename head_abstract_t::index_type
-    index_type
-    ;
-    reifier_indexed_base
-      ( ReifyApply const& a_reify
-      , ArgsConcreteAbstract* a_ptrs_tar_src
-      )
-    : super_t
-      ( a_reify
-      , a_ptrs_tar_src
-      )
-    {
-    }
-        typedef 
-      typename ReifyApply::result_type 
-    result_type
-    ;
-      template
-      < case_type CaseValue
-      >
-      result_type 
-    operator()
-      ( mpl::integral_c<case_type,CaseValue> index
-      )const
-      /**@brief
-       *  "Reifies" the head_abstract() into
-       *  the type indicated by the tag, CaseValue.
-       *  Then calls this->push_back_concrete.
-       */
-    {
-          index_type const 
-        index_concrete=index_type(CaseValue);
-          typename super_t::head_abstract_t&
-        my_head_abstract=this->head_abstract();
-            typedef 
-          decltype(my_head_abstract.template project<index_concrete>()) 
-        tail_type;
-        tail_type& a_tail_concrete=my_head_abstract.template project<index_concrete>();
-        return this->push_back_concrete(a_tail_concrete);
-    }
-        
-};
-
-}//exit namespace multiple_dispatch
-}//exit namespace pack
-
-}//exit composite_storage namespace
-}//exit boost namespace
-#endif
Deleted: sandbox/variadic_templates/boost/composite_storage/pack/multiple_dispatch/reifier_switch.hpp
==============================================================================
--- sandbox/variadic_templates/boost/composite_storage/pack/multiple_dispatch/reifier_switch.hpp	2012-05-10 11:27:56 EDT (Thu, 10 May 2012)
+++ (empty file)
@@ -1,80 +0,0 @@
-//
-#ifndef BOOST_COMPOSITE_STORAGE_PACK_MULTIPLE_DISPATCH_REIFIER_SWITCH_HPP_INCLUDED
-#define BOOST_COMPOSITE_STORAGE_PACK_MULTIPLE_DISPATCH_REIFIER_SWITCH_HPP_INCLUDED
-//  (C) Copyright Larry Evans 2010.
-//
-//  Permission to copy, use, modify, sell and distribute this software
-//  is granted provided this copyright notice appears in all copies.
-//  This software is provided "as is" without express or implied
-//  warranty, and with no claim as to its suitability for any purpose.
-//
-#include <boost/composite_storage/pack/multiple_dispatch/reifier_indexed_base.hpp>
-
-namespace boost
-{
-namespace composite_storage
-{
-namespace pack
-{
-namespace multiple_dispatch
-{
-
-  template
-  < typename ReifyApply
-  , typename ArgsConcreteAbstract
-  >
-struct reifier_switch
-: reifier_indexed_base
-  < ReifyApply
-  , ArgsConcreteAbstract
-  >
-  /**@brief
-   *  Uses switch statment (in functor_indexed::apply)
-   *  to convert "abstract" head of an ArgsConcreteAbstract to
-   *  its "concrete" counterpart, and then call
-   *  a ReifyApply with the converted ArgsConcreteAbstract.
-   */
-{
-        typedef
-      reifier_indexed_base
-      < ReifyApply
-      , ArgsConcreteAbstract
-      >
-    super_t
-    ;
-    reifier_switch
-      ( ReifyApply const& a_reify
-      , ArgsConcreteAbstract* a_ptrs_tar_src
-      )
-    : super_t
-      ( a_reify
-      , a_ptrs_tar_src
-      )
-    {
-    }
-        typedef 
-      typename ReifyApply::result_type 
-    result_type
-    ;
-      result_type
-    reify_rest
-      ( void
-      )const
-      /**@brief
-       *  Indirectly, calls this->super_t::operator()( mpl::integral_c<case_type,CaseValue> index)
-       *  where CaseValue == head_abstract().which().
-       */
-    {
-        return functor_indexed::apply
-          ( *this
-          , this->head_abstract().which()
-          );
-    }
-};
-
-}//exit namespace multiple_dispatch
-}//exit namespace pack
-
-}//exit composite_storage namespace
-}//exit boost namespace
-#endif
Modified: sandbox/variadic_templates/boost/composite_storage/pack/multiple_dispatch/reify_apply.hpp
==============================================================================
--- sandbox/variadic_templates/boost/composite_storage/pack/multiple_dispatch/reify_apply.hpp	(original)
+++ sandbox/variadic_templates/boost/composite_storage/pack/multiple_dispatch/reify_apply.hpp	2012-05-10 11:27:56 EDT (Thu, 10 May 2012)
@@ -84,7 +84,7 @@
        *  When there are no more abstract arguments
        *  ( presumably after a number of calls to
        *    the previous operator()(...) member function.
-       *  ) apply my_functor to *tar_src_p nd return result.
+       *  ) apply my_functor to *tar_src_p and return result.
        */
     {
         #ifdef MULTIPLE_DISPATCH_DEBUG