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