Update of /cvsroot/boost/boost/boost/fusion/algorithm/iteration
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv21202/algorithm/iteration

Modified Files:
        accumulate.hpp fold.hpp for_each.hpp 
Log Message:
loop unrolling for fusion iteration algorithms

Index: accumulate.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/fusion/algorithm/iteration/accumulate.hpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- accumulate.hpp      2 Mar 2007 10:44:06 -0000       1.3
+++ accumulate.hpp      28 May 2007 23:12:53 -0000      1.4
@@ -7,9 +7,7 @@
 #if !defined(FUSION_ACCUMULATE_09172005_1032)
 #define FUSION_ACCUMULATE_09172005_1032
 
-#include <boost/fusion/algorithm/iteration/detail/fold.hpp>
-#include <boost/fusion/iterator/equal_to.hpp>
-#include <boost/fusion/sequence/intrinsic/size.hpp>
+#include <boost/fusion/algorithm/iteration/fold.hpp>
 
 namespace boost { namespace fusion
 {
@@ -19,46 +17,22 @@
     {
         template <typename Sequence, typename State, typename F>
         struct accumulate
-        {
-            typedef typename
-                detail::static_fold<
-                    typename result_of::begin<Sequence>::type
-                  , typename result_of::end<Sequence>::type
-                  , State
-                  , F
-                >::type
-            type;
-        };
+            : result_of::fold<Sequence, State, F>
+        {};
     }
 
     template <typename Sequence, typename State, typename F>
     inline typename result_of::accumulate<Sequence, State, F>::type
     accumulate(Sequence& seq, State const& state, F const& f)
     {
-        return detail::fold(
-            fusion::begin(seq)
-          , fusion::end(seq)
-          , state
-          , f
-          , result_of::equal_to<
-                typename result_of::begin<Sequence>::type
-              , typename result_of::end<Sequence>::type>()
-        );
+        return fusion::fold(seq, state, f);
     }
 
     template <typename Sequence, typename State, typename F>
     inline typename result_of::accumulate<Sequence const, State, F>::type
     accumulate(Sequence const& seq, State const& state, F const& f)
     {
-        return detail::fold(
-            fusion::begin(seq)
-          , fusion::end(seq)
-          , state
-          , f
-          , result_of::equal_to<
-                typename result_of::begin<Sequence const>::type
-              , typename result_of::end<Sequence const>::type>()
-        );
+        return fusion::fold(seq, state, f);
     }
 }}
 

Index: fold.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/fusion/algorithm/iteration/fold.hpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- fold.hpp    2 Mar 2007 10:44:06 -0000       1.3
+++ fold.hpp    28 May 2007 23:12:53 -0000      1.4
@@ -1,65 +1,46 @@
 /*=============================================================================
-    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2001-2007 Joel de Guzman
+    Copyright (c) 2007 Dan Marsden
 
     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)
 
==============================================================================*/
-#if !defined(FUSION_FOLD_05052005_1214)
-#define FUSION_FOLD_05052005_1214
+#if !defined(BOOST_FUSION_FOLD_05052005_1214)
+#define BOOST_FUSION_FOLD_05052005_1214
 
 #include <boost/fusion/algorithm/iteration/detail/fold.hpp>
 #include <boost/fusion/sequence/intrinsic/size.hpp>
-#include <boost/fusion/iterator/equal_to.hpp>
+#include <boost/fusion/support/category_of.hpp>
+
+#include <boost/type_traits/is_base_of.hpp>
 #include <boost/static_assert.hpp>
 
-namespace boost { namespace fusion
-{
-    struct void_;
+namespace boost { namespace fusion { 
+
+    struct random_access_traversal_tag;
 
     namespace result_of
     {
         template <typename Sequence, typename State, typename F>
         struct fold
-        {
-            typedef typename
-                detail::static_fold<
-                    typename result_of::begin<Sequence>::type
-                  , typename result_of::end<Sequence>::type
-                  , State
-                  , F
-                >::type
-            type;
-        };
+            : fusion::detail::choose_fold<
+            Sequence, State, F
+            , is_base_of<random_access_traversal_tag, typename 
traits::category_of<Sequence>::type>::value>
+        {};
     }
 
     template <typename Sequence, typename State, typename F>
     inline typename result_of::fold<Sequence, State, F>::type
     fold(Sequence& seq, State const& state, F const& f)
     {
-        return detail::fold(
-            fusion::begin(seq)
-          , fusion::end(seq)
-          , state
-          , f
-          , result_of::equal_to<
-                typename result_of::begin<Sequence>::type
-              , typename result_of::end<Sequence>::type>()
-        );
+        return detail::fold(seq, state, f, typename 
traits::category_of<Sequence>::type());
     }
 
     template <typename Sequence, typename State, typename F>
     inline typename result_of::fold<Sequence const, State, F>::type
     fold(Sequence const& seq, State const& state, F const& f)
     {
-        return detail::fold(
-            fusion::begin(seq)
-          , fusion::end(seq)
-          , state
-          , f
-          , result_of::equal_to<
-                typename result_of::begin<Sequence const>::type
-              , typename result_of::end<Sequence const>::type>()
-        );
+        return detail::fold(seq, state, f, typename 
traits::category_of<Sequence>::type());
     }
 }}
 

Index: for_each.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/fusion/algorithm/iteration/for_each.hpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- for_each.hpp        2 Mar 2007 10:44:06 -0000       1.2
+++ for_each.hpp        28 May 2007 23:12:53 -0000      1.3
@@ -1,19 +1,19 @@
 /*=============================================================================
-    Copyright (c) 2001-2006 Joel de Guzman
+    Copyright (c) 2001-2007 Joel de Guzman
+    Copyright (c) 2007 Dan Marsden
 
     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)
 
==============================================================================*/
-#if !defined(FUSION_FOR_EACH_05052005_1027)
-#define FUSION_FOR_EACH_05052005_1027
+#if !defined(BOOST_FUSION_FOR_EACH_20070527_0943)
+#define BOOST_FUSION_FOR_EACH_20070527_0943
 
-#include <boost/fusion/sequence/intrinsic/begin.hpp>
-#include <boost/fusion/sequence/intrinsic/end.hpp>
-#include <boost/fusion/iterator/equal_to.hpp>
 #include <boost/fusion/algorithm/iteration/detail/for_each.hpp>
 
-namespace boost { namespace fusion
-{
+#include <boost/fusion/support/category_of.hpp>
+
+namespace boost { namespace fusion {
+
     namespace result_of
     {
         template <typename Sequence, typename F>
@@ -23,32 +23,21 @@
         };
     }
 
+    struct random_access_traversal_tag;
+
     template <typename Sequence, typename F>
     inline void
     for_each(Sequence& seq, F const& f)
     {
-        detail::for_each(
-                fusion::begin(seq)
-              , fusion::end(seq)
-              , f
-              , result_of::equal_to<
-                    typename result_of::begin<Sequence>::type
-                  , typename result_of::end<Sequence>::type>());
+        detail::for_each(seq, f, typename 
traits::category_of<Sequence>::type());
     }
 
     template <typename Sequence, typename F>
     inline void
     for_each(Sequence const& seq, F const& f)
     {
-        detail::for_each(
-                fusion::begin(seq)
-              , fusion::end(seq)
-              , f
-              , result_of::equal_to<
-                    typename result_of::begin<Sequence const>::type
-                  , typename result_of::end<Sequence const>::type>());
+        detail::for_each(seq, f, typename 
traits::category_of<Sequence>::type());
     }
 }}
 
 #endif
-


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Boost-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/boost-cvs

Reply via email to