|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r60219 - in sandbox/SOC/2009/fusion: boost/fusion/algorithm/query boost/fusion/algorithm/transformation boost/fusion/algorithm/transformation/detail/pp boost/fusion/container/detail/pp boost/fusion/container/generation/detail/pp boost/fusion/container/generation/detail/variadic_templates boost/fusion/container/list/detail/pp boost/fusion/container/vector/detail/pp boost/fusion/container/vector/detail/variadic_templates boost/fusion/functional/adapter boost/fusion/functional/adapter/detail boost/fusion/functional/adapter/detail/0x boost/fusion/functional/adapter/detail/no_0x boost/fusion/functional/adapter/detail/pp boost/fusion/functional/generation boost/fusion/functional/generation/detail boost/fusion/functional/invocation boost/fusion/functional/invocation/detail boost/fusion/functional/invocation/detail/0x boost/fusion/functional/invocation/detail/no_0x boost/fusion/functional/invocation/detail/pp boost/fusion/functional/invocation/detail/variadic_templates boost/fusion/sequence boost/fusion/sequence/convenience boost/fusion/support/internal boost/fusion/view/detail boost/fusion/view/nview boost/fusion/view/nview/detail/pp boost/fusion/view/reverse_view boost/fusion/view/single_view boost/fusion/view/zip_view libs/fusion/test/algorithm libs/fusion/test/functional
From: mr.chr.schmidt_at_[hidden]
Date: 2010-03-05 18:59:33
Author: cschmidt
Date: 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
New Revision: 60219
URL: http://svn.boost.org/trac/boost/changeset/60219
Log:
new functional impl
Added:
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/pp/zip_n.hpp (contents, props changed)
sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/as_seq_n.hpp (contents, props changed)
sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/forward_interface_n.hpp (contents, props changed)
sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_map_n.hpp (contents, props changed)
sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_seq_n.hpp (contents, props changed)
sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/map_tie_n.hpp (contents, props changed)
sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/seq_tie_n.hpp (contents, props changed)
sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/cons_gen_n.hpp (contents, props changed)
sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/list_forward_ctor_n.hpp (contents, props changed)
sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n_chooser_n.hpp (contents, props changed)
sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/detail/fused_impl.hpp (contents, props changed)
sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/detail/pp/
sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/detail/pp/unfused_invocation_n.hpp (contents, props changed)
sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/detail/pp/unfused_typed_impl_n.hpp (contents, props changed)
sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/invoke.hpp (contents, props changed)
sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/member_object_pointer_helper.hpp (contents, props changed)
sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/pp/
sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/pp/invoke_impl.hpp (contents, props changed)
sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/pp/invoke_impl_n.hpp (contents, props changed)
sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/variadic_templates/
sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/variadic_templates/invoke_impl.hpp (contents, props changed)
sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/pp/as_nview_n.hpp (contents, props changed)
Removed:
sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/detail/0x/
sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/detail/no_0x/
sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/0x/
sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/no_0x/
sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/pp/as_nview.hpp
Text files modified:
sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count_if.hpp | 4
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/clear.hpp | 2
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/pp/zip.hpp | 54 --------------
sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove.hpp | 5
sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/as_seq.hpp | 44 -----------
sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/forward_interface.hpp | 48 +++---------
sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_map.hpp | 76 --------------------
sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_seq.hpp | 53 -------------
sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/map_tie.hpp | 75 -------------------
sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/seq_tie.hpp | 51 -------------
sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/make_map.hpp | 1
sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/map_tie.hpp | 1
sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/cons_gen.hpp | 43 +---------
sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/list_forward_ctor.hpp | 43 +----------
sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n_chooser.hpp | 61 +++++----------
sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector_n.hpp | 2
sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/fused.hpp | 16 +--
sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/fused_function_object.hpp | 16 +--
sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/fused_procedure.hpp | 16 +--
sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/limits.hpp | 4
sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/unfused.hpp | 119 +++++++++++++++++++++++++++++++-
sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/unfused_typed.hpp | 147 ++++++++++++++++++++++++++++++++++++++-
sandbox/SOC/2009/fusion/boost/fusion/functional/generation/detail/gen_make_adapter.hpp | 8 +-
sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_fused.hpp | 13 +--
sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_fused_function_object.hpp | 13 +--
sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_fused_procedure.hpp | 13 +--
sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_unfused.hpp | 13 +--
sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/that_ptr.hpp | 4
sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/invoke.hpp | 19 ++--
sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/invoke_function_object.hpp | 21 +++--
sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/invoke_procedure.hpp | 21 +++--
sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/limits.hpp | 3
sandbox/SOC/2009/fusion/boost/fusion/sequence/convenience/copy.hpp | 2
sandbox/SOC/2009/fusion/boost/fusion/sequence/sequence_facade.hpp | 1
sandbox/SOC/2009/fusion/boost/fusion/support/internal/result_of.hpp | 73 ++++++++++++++-----
sandbox/SOC/2009/fusion/boost/fusion/support/internal/template.hpp | 2
sandbox/SOC/2009/fusion/boost/fusion/view/detail/view_storage.hpp | 2
sandbox/SOC/2009/fusion/boost/fusion/view/nview/nview.hpp | 4
sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/reverse_view.hpp | 3
sandbox/SOC/2009/fusion/boost/fusion/view/single_view/single_view.hpp | 2
sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/zip_view.hpp | 4
sandbox/SOC/2009/fusion/libs/fusion/test/algorithm/remove_if.cpp | 4
sandbox/SOC/2009/fusion/libs/fusion/test/functional/invoke.cpp | 4
sandbox/SOC/2009/fusion/libs/fusion/test/functional/unfused.cpp | 3
sandbox/SOC/2009/fusion/libs/fusion/test/functional/unfused_typed.cpp | 3
45 files changed, 473 insertions(+), 643 deletions(-)
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count_if.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count_if.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/query/count_if.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -58,7 +58,7 @@
>::type
count_if(BOOST_FUSION_R_ELSE_CLREF(Seq) seq, BOOST_FUSION_RREF_ELSE_OBJ(F) f)
{
- return fold(BOOST_FUSION_FORWARD(Seq,seq),
+ return fusion::fold(BOOST_FUSION_FORWARD(Seq,seq),
0,
detail::count_if_helper<BOOST_FUSION_RREF_ELSE_OBJ(F)>(f));
}
@@ -68,7 +68,7 @@
inline typename result_of::count_if<Seq&,F>::type
count_if(Seq& seq, F f)
{
- return fold(seq,
+ return fusion::fold(seq,
0,
detail::count_if_helper<F>(f));
}
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/clear.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/clear.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/clear.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -24,7 +24,7 @@
{
namespace result_of
{
- //TODO doc!!!
+ //TODO empty sequence!!!
template <typename Seq>
struct clear
#ifdef BOOST_NO_VARIADIC_TEMPLATES
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/pp/zip.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/pp/zip.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/pp/zip.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -7,7 +7,6 @@
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
-#ifndef BOOST_PP_IS_ITERATING
#ifndef BOOST_FUSION_ALGORITHM_TRANSFORMATION_DETAIL_PP_ZIP_HPP
#define BOOST_FUSION_ALGORITHM_TRANSFORMATION_DETAIL_PP_ZIP_HPP
@@ -30,61 +29,10 @@
struct zip;
}
-#define BOOST_PP_FILENAME_1 <boost/fusion/algorithm/transformation/detail/pp/zip.hpp>
+#define BOOST_PP_FILENAME_1 <boost/fusion/algorithm/transformation/detail/pp/zip_n.hpp>
#define BOOST_PP_ITERATION_LIMITS (2, FUSION_MAX_ZIP_SEQUENCES)
#include BOOST_PP_ITERATE()
}}
#endif
-#else
-
-#define BOOST_FUSION_N BOOST_PP_ITERATION()
-
- namespace result_of
- {
- VARIADIC_TEMPLATE(BOOST_FUSION_N)
- struct zip
- EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(
- FUSION_MAX_ZIP_SEQUENCES,BOOST_FUSION_N)
- {
-#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERS
-#define BOOST_FUSION_IS_FORWARD_ASSERT(Z,N,_)\
- BOOST_FUSION_MPL_ASSERT((traits::is_forward<BOOST_PP_CAT(T,N)>));
-
- BOOST_PP_REPEAT(BOOST_FUSION_N,BOOST_FUSION_IS_FORWARD_ASSERT,_)
-
-#undef BOOST_FUSION_IS_FORWARD_ASSERT
-#endif
-
- typedef
- zip_view<
- typename result_of::vector_tie<
- EXPAND_TEMPLATE_ARGUMENTS(BOOST_FUSION_N)
- >::type
- >
- type;
- };
- }
-
- VARIADIC_TEMPLATE_A(BOOST_FUSION_N)
- inline
-#if BOOST_FUSION_N
- typename
-#endif
- result_of::zip<
- EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_CLREF(BOOST_FUSION_N)
- >::type
- zip(EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_CLREF(BOOST_FUSION_N))
- {
- return
-#if BOOST_FUSION_N
- typename
-#endif
- result_of::zip<
- EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_CLREF(BOOST_FUSION_N)
- >::type(fusion::vector_tie(EXPAND_PARAMETERS_A(BOOST_FUSION_N)));
- }
-
-#undef BOOST_FUSION_N
-#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/pp/zip_n.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/detail/pp/zip_n.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,55 @@
+/*=============================================================================
+ Copyright (c) 2009 Christopher Schmidt
+
+ 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)
+==============================================================================*/
+
+#define BOOST_FUSION_N BOOST_PP_ITERATION()
+
+ namespace result_of
+ {
+ VARIADIC_TEMPLATE(BOOST_FUSION_N)
+ struct zip
+ EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(
+ FUSION_MAX_ZIP_SEQUENCES,BOOST_FUSION_N)
+ {
+#ifdef BOOST_FUSION_ENABLE_STATIC_ASSERS
+#define BOOST_FUSION_IS_FORWARD_ASSERT(Z,N,_)\
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<BOOST_PP_CAT(T,N)>));
+
+ BOOST_PP_REPEAT(BOOST_FUSION_N,BOOST_FUSION_IS_FORWARD_ASSERT,_)
+
+#undef BOOST_FUSION_IS_FORWARD_ASSERT
+#endif
+
+ typedef
+ zip_view<
+ typename result_of::vector_tie<
+ EXPAND_TEMPLATE_ARGUMENTS(BOOST_FUSION_N)
+ >::type
+ >
+ type;
+ };
+ }
+
+ VARIADIC_TEMPLATE_A(BOOST_FUSION_N)
+ inline
+#if BOOST_FUSION_N
+ typename
+#endif
+ result_of::zip<
+ EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_CLREF(BOOST_FUSION_N)
+ >::type
+ zip(EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_CLREF(BOOST_FUSION_N))
+ {
+ return
+#if BOOST_FUSION_N
+ typename
+#endif
+ result_of::zip<
+ EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_CLREF(BOOST_FUSION_N)
+ >::type(fusion::vector_tie(EXPAND_PARAMETERS_A(BOOST_FUSION_N)));
+ }
+
+#undef BOOST_FUSION_N
Modified: sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/algorithm/transformation/remove.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -35,7 +35,8 @@
inline typename result_of::remove<BOOST_FUSION_R_ELSE_CLREF(Seq), T>::type
remove(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
{
- return remove_if<is_same<mpl::_1, T> >(BOOST_FUSION_FORWARD(Seq,seq));
+ return fusion::remove_if<is_same<mpl::_1, T> >(
+ BOOST_FUSION_FORWARD(Seq,seq));
}
#ifdef BOOST_NO_RVALUE_REFERENCES
@@ -44,7 +45,7 @@
result_of::remove<,Seq,&, T>)
remove_if(Seq& seq)
{
- return remove_if<is_same<mpl::_1, T> >(seq);
+ return fusion::remove_if<is_same<mpl::_1, T> >(seq);
}
#endif
}}
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/as_seq.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/as_seq.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/as_seq.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,12 +1,10 @@
/*=============================================================================
- Copyright (c) 2009 Christopher Schmidt
+ Copyright (c) 2009-2010 Christopher Schmidt
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)
==============================================================================*/
-#ifndef BOOST_PP_IS_ITERATING
-
#include <boost/fusion/iterator/value_of.hpp>
#include <boost/fusion/iterator/deref.hpp>
#include <boost/fusion/iterator/next.hpp>
@@ -23,46 +21,8 @@
template <int Size>
struct BOOST_PP_CAT(BOOST_PP_CAT(as_,BOOST_FUSION_SEQ_NAME),_impl);
-#define BOOST_PP_FILENAME_1 <boost/fusion/container/detail/pp/as_seq.hpp>
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/detail/pp/as_seq_n.hpp>
#define BOOST_PP_ITERATION_LIMITS (0, BOOST_FUSION_MAX_SEQ_SIZE)
#include BOOST_PP_ITERATE()
}}}
-#else
-
-#define BOOST_FUSION_N BOOST_PP_ITERATION()
-
- template <>
- struct BOOST_PP_CAT(BOOST_PP_CAT(as_,BOOST_FUSION_SEQ_NAME),_impl)<
- BOOST_FUSION_N
- >
- {
- template <typename It0>
- struct apply
- {
-#if BOOST_FUSION_N
- typedef typename result_of::value_of<It0>::type T0;
-#endif
-
-#define BOOST_FUSION_IT_VALUE_ENUM(Z, N, _)\
- typedef typename\
- result_of::next<BOOST_PP_CAT(It, BOOST_PP_DEC(N))>::type\
- BOOST_PP_CAT(It, N);\
- typedef typename\
- result_of::value_of<BOOST_PP_CAT(It, N)>::type\
- BOOST_PP_CAT(T, N);
-
- BOOST_PP_REPEAT_FROM_TO(
- 1, BOOST_FUSION_N, BOOST_FUSION_IT_VALUE_ENUM, _)
-
-#undef BOOST_FUSION_IT_VALUE_ENUM
-
- typedef
- BOOST_FUSION_SEQ_NAME<BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, T)>
- type;
- };
- };
-
-#undef BOOST_FUSION_N
-
-#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/as_seq_n.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/as_seq_n.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,42 @@
+/*=============================================================================
+ Copyright (c) 2009-2010 Christopher Schmidt
+
+ 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)
+==============================================================================*/
+
+#define BOOST_FUSION_N BOOST_PP_ITERATION()
+
+ template <>
+ struct BOOST_PP_CAT(BOOST_PP_CAT(as_,BOOST_FUSION_SEQ_NAME),_impl)<
+ BOOST_FUSION_N
+ >
+ {
+ template <typename It0>
+ struct apply
+ {
+#if BOOST_FUSION_N
+ typedef typename result_of::value_of<It0>::type T0;
+#endif
+
+#define BOOST_FUSION_IT_VALUE_ENUM(Z, N, _)\
+ typedef typename\
+ result_of::next<BOOST_PP_CAT(It, BOOST_PP_DEC(N))>::type\
+ BOOST_PP_CAT(It, N);\
+ typedef typename\
+ result_of::value_of<BOOST_PP_CAT(It, N)>::type\
+ BOOST_PP_CAT(T, N);
+
+ BOOST_PP_REPEAT_FROM_TO(
+ 1, BOOST_FUSION_N, BOOST_FUSION_IT_VALUE_ENUM, _)
+
+#undef BOOST_FUSION_IT_VALUE_ENUM
+
+ typedef
+ BOOST_FUSION_SEQ_NAME<BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, T)>
+ type;
+ };
+ };
+
+#undef BOOST_FUSION_N
+
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/forward_interface.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/forward_interface.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/forward_interface.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,43 +1,23 @@
/*=============================================================================
- Copyright (c) 2009 Christopher Schmidt
+ Copyright (c) 2009-2010 Christopher Schmidt
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)
==============================================================================*/
-#ifndef BOOST_PP_IS_ITERATING
-# ifndef BOOST_FUSION_SEQ_NAME
-# ifndef BOOST_FUSION_CONTAINER_DETAIL_PP_FORWARD_INTERFACE_HPP
-# define BOOST_FUSION_CONTAINER_DETAIL_PP_FORWARD_INTERFACE_HPP
-
-# include <boost/fusion/support/internal/template.hpp>
-
-# include <boost/config.hpp>
-# include <boost/preprocessor/iterate.hpp>
-# include <boost/preprocessor/repetition/enum_params.hpp>
-# include <boost/preprocessor/repetition/enum_binary_params.hpp>
-# endif
-# else
-# define BOOST_PP_FILENAME_1 <boost/fusion/container/detail/pp/forward_interface.hpp>
-# define BOOST_PP_ITERATION_LIMITS (0, BOOST_FUSION_MAX_SEQ_SIZE)
-# include BOOST_PP_ITERATE()
+#ifndef BOOST_FUSION_SEQ_NAME
+# ifndef BOOST_FUSION_CONTAINER_DETAIL_PP_FORWARD_INTERFACE_HPP
+# define BOOST_FUSION_CONTAINER_DETAIL_PP_FORWARD_INTERFACE_HPP
+
+# include <boost/fusion/support/internal/template.hpp>
+
+# include <boost/config.hpp>
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/repetition/enum_params.hpp>
+# include <boost/preprocessor/repetition/enum_binary_params.hpp>
# endif
#else
-# define BOOST_FUSION_N BOOST_PP_ITERATION()
-
-# ifndef BOOST_NO_RVALUE_REFERENCES
- VARIADIC_TEMPLATE_A(BOOST_FUSION_N)
-# endif
-# if BOOST_FUSION_N == 1
- explicit
-# endif
-# ifdef BOOST_NO_RVALUE_REFERENCES
- BOOST_FUSION_SEQ_NAME(EXPAND_TEMPLATE_ARGUMENTS_CALL_PARAMS(BOOST_FUSION_N))
-# else
- BOOST_FUSION_SEQ_NAME(EXPAND_TEMPLATE_ARGUMENTS_A(BOOST_FUSION_N))
-# endif
- : BOOST_FUSION_INIT_BASE(EXPAND_PARAMETERS_A(BOOST_FUSION_N))
- {}
-
-# undef BOOST_FUSION_N
+# define BOOST_PP_FILENAME_1 <boost/fusion/container/detail/pp/forward_interface_n.hpp>
+# define BOOST_PP_ITERATION_LIMITS (0, BOOST_FUSION_MAX_SEQ_SIZE)
+# include BOOST_PP_ITERATE()
#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/forward_interface_n.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/detail/pp/forward_interface_n.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,24 @@
+/*=============================================================================
+ Copyright (c) 2009-2010 Christopher Schmidt
+
+ 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)
+==============================================================================*/
+
+#define BOOST_FUSION_N BOOST_PP_ITERATION()
+
+#ifndef BOOST_NO_RVALUE_REFERENCES
+ VARIADIC_TEMPLATE_A(BOOST_FUSION_N)
+#endif
+#if BOOST_FUSION_N == 1
+ explicit
+#endif
+#ifdef BOOST_NO_RVALUE_REFERENCES
+ BOOST_FUSION_SEQ_NAME(EXPAND_TEMPLATE_ARGUMENTS_CALL_PARAMS(BOOST_FUSION_N))
+#else
+ BOOST_FUSION_SEQ_NAME(EXPAND_TEMPLATE_ARGUMENTS_A(BOOST_FUSION_N))
+#endif
+ : BOOST_FUSION_INIT_BASE(EXPAND_PARAMETERS_A(BOOST_FUSION_N))
+ {}
+
+#undef BOOST_FUSION_N
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_map.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_map.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_map.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,12 +1,11 @@
/*=============================================================================
Copyright (c) 2001-2006 Joel de Guzman
- Copyright (c) 2009 Christopher Schmidt
+ Copyright (c) 2009-2010 Christopher Schmidt
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)
==============================================================================*/
-#ifndef BOOST_PP_IS_ITERATING
#ifndef BOOST_FUSION_CONTAINER_GENERATION_DETAIL_PP_MAKE_MAP_HPP
#define BOOST_FUSION_CONTAINER_GENERATION_DETAIL_PP_MAKE_MAP_HPP
@@ -39,81 +38,10 @@
struct make_map;
}
-#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp/make_map.hpp>
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp/make_map_n.hpp>
#define BOOST_PP_ITERATION_LIMITS (0, FUSION_MAX_MAP_SIZE)
#include BOOST_PP_ITERATE()
}}
#endif
-#else
-
-#define BOOST_FUSION_N BOOST_PP_ITERATION()
-#if BOOST_FUSION_N
-# define BOOST_FUSION_COMMA ,
-#else
-# define BOOST_FUSION_COMMA
-#endif
-
- namespace result_of
- {
- template<
- BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename K)
- BOOST_FUSION_COMMA
- BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename T)
- >
- struct make_map
-#if BOOST_FUSION_N!=FUSION_MAX_MAP_SIZE
- <
- BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, K)
- BOOST_FUSION_COMMA
- BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, T)
- >
-#endif
- {
-#define BOOST_FUSION_MAP_ELEMENT(Z,N,_)\
- pair<\
- BOOST_PP_CAT(K,N)\
- , typename traits::deduce<BOOST_PP_CAT(T,N)>::type\
- >
-
- typedef
- map<BOOST_PP_ENUM(BOOST_FUSION_N, BOOST_FUSION_MAP_ELEMENT, _)>
- type;
-
-#undef BOOST_FUSION_MAP_ELEMENT
- };
- }
-
-#if BOOST_FUSION_N
- template<
- BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename K)
- , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename A)
- >
-#endif
- inline
-#if BOOST_FUSION_N
- typename
-#endif
- result_of::make_map<
- BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, K)
- BOOST_FUSION_COMMA
- EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_CLREF(BOOST_FUSION_N)
- >::type
- make_map(
- EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_CLREF(BOOST_FUSION_N))
- {
- return
-#if BOOST_FUSION_N
- typename
-#endif
- result_of::make_map<
- BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, K)
- BOOST_FUSION_COMMA
- EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_CLREF(BOOST_FUSION_N)
- >::type(EXPAND_PARAMETERS_A(BOOST_FUSION_N));
- }
-
-#undef BOOST_FUSION_COMMA
-#undef BOOST_FUSION_N
-#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_map_n.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_map_n.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,77 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2009-2010 Christopher Schmidt
+
+ 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)
+==============================================================================*/
+
+#define BOOST_FUSION_N BOOST_PP_ITERATION()
+#if BOOST_FUSION_N
+# define BOOST_FUSION_COMMA ,
+#else
+# define BOOST_FUSION_COMMA
+#endif
+
+ namespace result_of
+ {
+ template<
+ BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename K)
+ BOOST_FUSION_COMMA
+ BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename T)
+ >
+ struct make_map
+#if BOOST_FUSION_N!=FUSION_MAX_MAP_SIZE
+ <
+ BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, K)
+ BOOST_FUSION_COMMA
+ BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, T)
+ >
+#endif
+ {
+#define BOOST_FUSION_MAP_ELEMENT(Z,N,_)\
+ pair<\
+ BOOST_PP_CAT(K,N)\
+ , typename traits::deduce<BOOST_PP_CAT(T,N)>::type\
+ >
+
+ typedef
+ map<BOOST_PP_ENUM(BOOST_FUSION_N, BOOST_FUSION_MAP_ELEMENT, _)>
+ type;
+
+#undef BOOST_FUSION_MAP_ELEMENT
+ };
+ }
+
+#if BOOST_FUSION_N
+ template<
+ BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename K)
+ , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename A)
+ >
+#endif
+ inline
+#if BOOST_FUSION_N
+ typename
+#endif
+ result_of::make_map<
+ BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, K)
+ BOOST_FUSION_COMMA
+ EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_CLREF(BOOST_FUSION_N)
+ >::type
+ make_map(
+ EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_CLREF(BOOST_FUSION_N))
+ {
+ return
+#if BOOST_FUSION_N
+ typename
+#endif
+ result_of::make_map<
+ BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, K)
+ BOOST_FUSION_COMMA
+ EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_CLREF(BOOST_FUSION_N)
+ >::type(EXPAND_PARAMETERS_A(BOOST_FUSION_N));
+ }
+
+#undef BOOST_FUSION_COMMA
+#undef BOOST_FUSION_N
+
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_seq.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_seq.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_seq.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,12 +1,10 @@
/*=============================================================================
- Copyright (c) 2009 Christopher Schmidt
+ Copyright (c) 2009-2010 Christopher Schmidt
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)
==============================================================================*/
-#ifndef BOOST_PP_IS_ITERATING
-
#include <boost/fusion/support/deduce.hpp>
#include <boost/fusion/support/internal/template.hpp>
@@ -22,54 +20,7 @@
struct BOOST_PP_CAT(make_,BOOST_FUSION_SEQ_NAME(BOOST_PP_EMPTY()));
}
-#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp/make_seq.hpp>
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp/make_seq_n.hpp>
#define BOOST_PP_ITERATION_LIMITS (0, BOOST_FUSION_MAX_SEQ_SIZE)
#include BOOST_PP_ITERATE()
}}
-
-#else
-
-#define BOOST_FUSION_N BOOST_PP_ITERATION()
-
- namespace result_of
- {
- VARIADIC_TEMPLATE(BOOST_FUSION_N)
- struct BOOST_PP_CAT(make_,BOOST_FUSION_SEQ_NAME(BOOST_PP_EMPTY()))
- EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(
- BOOST_FUSION_MAX_SEQ_SIZE,BOOST_FUSION_N)
- {
- typedef
- BOOST_FUSION_SEQ_NAME(BOOST_FUSION_N)<
- EXPAND_TEMPLATE_ARGUMENTS_BINARY(
- BOOST_FUSION_N,
- typename traits::deduce<,
- >::type
- )
- >
- type;
- };
- }
-
- VARIADIC_TEMPLATE_A(BOOST_FUSION_N)
- inline
-#if BOOST_FUSION_N
- typename
-#endif
- result_of::BOOST_PP_CAT(make_,BOOST_FUSION_SEQ_NAME(BOOST_PP_EMPTY()))<
- EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_CLREF(BOOST_FUSION_N)
- >::type
- BOOST_PP_CAT(make_,BOOST_FUSION_SEQ_NAME(BOOST_PP_EMPTY()))(
- EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_CLREF(BOOST_FUSION_N))
- {
- return
-#if BOOST_FUSION_N
- typename
-#endif
- result_of::BOOST_PP_CAT(make_,BOOST_FUSION_SEQ_NAME(BOOST_PP_EMPTY()))<
- EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_CLREF(BOOST_FUSION_N)
- >::type(EXPAND_PARAMETERS_A(BOOST_FUSION_N));
- }
-
-#undef BOOST_FUSION_N
-
-#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_seq_n.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/make_seq_n.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,50 @@
+/*=============================================================================
+ Copyright (c) 2009-2010 Christopher Schmidt
+
+ 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)
+==============================================================================*/
+
+#define BOOST_FUSION_N BOOST_PP_ITERATION()
+
+ namespace result_of
+ {
+ VARIADIC_TEMPLATE(BOOST_FUSION_N)
+ struct BOOST_PP_CAT(make_,BOOST_FUSION_SEQ_NAME(BOOST_PP_EMPTY()))
+ EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(
+ BOOST_FUSION_MAX_SEQ_SIZE,BOOST_FUSION_N)
+ {
+ typedef
+ BOOST_FUSION_SEQ_NAME(BOOST_FUSION_N)<
+ EXPAND_TEMPLATE_ARGUMENTS_BINARY(
+ BOOST_FUSION_N,
+ typename traits::deduce<,
+ >::type
+ )
+ >
+ type;
+ };
+ }
+
+ VARIADIC_TEMPLATE_A(BOOST_FUSION_N)
+ inline
+#if BOOST_FUSION_N
+ typename
+#endif
+ result_of::BOOST_PP_CAT(make_,BOOST_FUSION_SEQ_NAME(BOOST_PP_EMPTY()))<
+ EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_CLREF(BOOST_FUSION_N)
+ >::type
+ BOOST_PP_CAT(make_,BOOST_FUSION_SEQ_NAME(BOOST_PP_EMPTY()))(
+ EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_CLREF(BOOST_FUSION_N))
+ {
+ return
+#if BOOST_FUSION_N
+ typename
+#endif
+ result_of::BOOST_PP_CAT(make_,BOOST_FUSION_SEQ_NAME(BOOST_PP_EMPTY()))<
+ EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_CLREF(BOOST_FUSION_N)
+ >::type(EXPAND_PARAMETERS_A(BOOST_FUSION_N));
+ }
+
+#undef BOOST_FUSION_N
+
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/map_tie.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/map_tie.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/map_tie.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,13 +1,12 @@
/*=============================================================================
Copyright (c) 2001-2006 Joel de Guzman
Copyright (c) 2006 Dan Marsden
- Copyright (c) 2009 Christopher Schmidt
+ Copyright (c) 2009-2010 Christopher Schmidt
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)
==============================================================================*/
-#ifndef BOOST_PP_IS_ITERATING
#ifndef BOOST_FUSION_CONTAINER_GENERATION_DETAIL_PP_MAP_TIE_HPP
#define BOOST_FUSION_CONTAINER_GENERATION_DETAIL_PP_MAP_TIE_HPP
@@ -40,80 +39,10 @@
struct map_tie;
}
-#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp/map_tie.hpp>
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp/map_tie_n.hpp>
#define BOOST_PP_ITERATION_LIMITS (0, FUSION_MAX_MAP_SIZE)
#include BOOST_PP_ITERATE()
}}
#endif
-#else
-
-#define BOOST_FUSION_N BOOST_PP_ITERATION()
-#if BOOST_FUSION_N
-# define BOOST_FUSION_COMMA ,
-#else
-# define BOOST_FUSION_COMMA
-#endif
-
- namespace result_of
- {
- template<
- BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename K)
- BOOST_FUSION_COMMA
- BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename T)
- >
- struct map_tie
-#if BOOST_FUSION_N!=FUSION_MAX_MAP_SIZE
- <
- BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, K)
- BOOST_FUSION_COMMA
- BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, T)
- >
-#endif
- {
-#define BOOST_FUSION_MAP_ELEMENT(Z,N,_)\
- pair<\
- BOOST_PP_CAT(K,N)\
- , typename detail::deduce_ref<BOOST_PP_CAT(T,N)>::type\
- >
-
- typedef
- map<BOOST_PP_ENUM(BOOST_FUSION_N, BOOST_FUSION_MAP_ELEMENT, _)>
- type;
-
-#undef BOOST_FUSION_MAP_ELEMENT
- };
- }
-
-#if BOOST_FUSION_N
- template<
- BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename K)
- , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename A)
- >
-#endif
- inline
-#if BOOST_FUSION_N
- typename
-#endif
- result_of::map_tie<
- BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, K)
- BOOST_FUSION_COMMA
- EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_LREF(BOOST_FUSION_N)
- >::type
- map_tie(EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_LREF(BOOST_FUSION_N))
- {
- return
-#if BOOST_FUSION_N
- typename
-#endif
- result_of::map_tie<
- BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, K)
- BOOST_FUSION_COMMA
- EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_LREF(BOOST_FUSION_N)
- >::type(EXPAND_PARAMETERS_A(BOOST_FUSION_N));
- }
-
-#undef BOOST_FUSION_COMMA
-#undef BOOST_FUSION_N
-#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/map_tie_n.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/map_tie_n.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,76 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2006 Dan Marsden
+ Copyright (c) 2009-2010 Christopher Schmidt
+
+ 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)
+==============================================================================*/
+
+#define BOOST_FUSION_N BOOST_PP_ITERATION()
+#if BOOST_FUSION_N
+# define BOOST_FUSION_COMMA ,
+#else
+# define BOOST_FUSION_COMMA
+#endif
+
+ namespace result_of
+ {
+ template<
+ BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename K)
+ BOOST_FUSION_COMMA
+ BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename T)
+ >
+ struct map_tie
+#if BOOST_FUSION_N!=FUSION_MAX_MAP_SIZE
+ <
+ BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, K)
+ BOOST_FUSION_COMMA
+ BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, T)
+ >
+#endif
+ {
+#define BOOST_FUSION_MAP_ELEMENT(Z,N,_)\
+ pair<\
+ BOOST_PP_CAT(K,N)\
+ , typename detail::deduce_ref<BOOST_PP_CAT(T,N)>::type\
+ >
+
+ typedef
+ map<BOOST_PP_ENUM(BOOST_FUSION_N, BOOST_FUSION_MAP_ELEMENT, _)>
+ type;
+
+#undef BOOST_FUSION_MAP_ELEMENT
+ };
+ }
+
+#if BOOST_FUSION_N
+ template<
+ BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename K)
+ , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename A)
+ >
+#endif
+ inline
+#if BOOST_FUSION_N
+ typename
+#endif
+ result_of::map_tie<
+ BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, K)
+ BOOST_FUSION_COMMA
+ EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_LREF(BOOST_FUSION_N)
+ >::type
+ map_tie(EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_LREF(BOOST_FUSION_N))
+ {
+ return
+#if BOOST_FUSION_N
+ typename
+#endif
+ result_of::map_tie<
+ BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, K)
+ BOOST_FUSION_COMMA
+ EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_LREF(BOOST_FUSION_N)
+ >::type(EXPAND_PARAMETERS_A(BOOST_FUSION_N));
+ }
+
+#undef BOOST_FUSION_COMMA
+#undef BOOST_FUSION_N
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/seq_tie.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/seq_tie.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/seq_tie.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,12 +1,10 @@
/*=============================================================================
- Copyright (c) 2009 Christopher Schmidt
+ Copyright (c) 2009-2010 Christopher Schmidt
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)
==============================================================================*/
-#ifndef BOOST_PP_IS_ITERATING
-
#include <boost/fusion/support/deduce.hpp>
#include <boost/fusion/support/internal/template.hpp>
@@ -21,54 +19,9 @@
struct BOOST_FUSION_FUNCTION_NAME;
}
-#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp/seq_tie.hpp>
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp/seq_tie_n.hpp>
#define BOOST_PP_ITERATION_LIMITS (0, BOOST_FUSION_MAX_SEQ_SIZE)
#include BOOST_PP_ITERATE()
}}
-#else
-
-#define BOOST_FUSION_N BOOST_PP_ITERATION()
-
- namespace result_of
- {
- VARIADIC_TEMPLATE(BOOST_FUSION_N)
- struct BOOST_FUSION_FUNCTION_NAME
- EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(
- BOOST_FUSION_MAX_SEQ_SIZE,BOOST_FUSION_N)
- {
- typedef
- BOOST_FUSION_SEQ_NAME(BOOST_FUSION_N)<
- EXPAND_TEMPLATE_ARGUMENTS_BINARY(
- BOOST_FUSION_N,
- typename detail::deduce_ref<,
- >::type
- )
- >
- type;
- };
- }
-
- VARIADIC_TEMPLATE_A(BOOST_FUSION_N)
- inline
-#if BOOST_FUSION_N
- typename
-#endif
- result_of::BOOST_FUSION_FUNCTION_NAME<
- EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_LREF(BOOST_FUSION_N)
- >::type
- BOOST_FUSION_FUNCTION_NAME(
- EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_LREF(BOOST_FUSION_N))
- {
- return
-#if BOOST_FUSION_N
- typename
-#endif
- result_of::BOOST_FUSION_FUNCTION_NAME<
- EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_LREF(BOOST_FUSION_N)
- >::type(EXPAND_PARAMETERS_A(BOOST_FUSION_N));
- }
-
-#undef N
-#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/seq_tie_n.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/pp/seq_tie_n.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,50 @@
+/*=============================================================================
+ Copyright (c) 2009-2010 Christopher Schmidt
+
+ 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)
+==============================================================================*/
+
+#define BOOST_FUSION_N BOOST_PP_ITERATION()
+
+ namespace result_of
+ {
+ VARIADIC_TEMPLATE(BOOST_FUSION_N)
+ struct BOOST_FUSION_FUNCTION_NAME
+ EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(
+ BOOST_FUSION_MAX_SEQ_SIZE,BOOST_FUSION_N)
+ {
+ typedef
+ BOOST_FUSION_SEQ_NAME(BOOST_FUSION_N)<
+ EXPAND_TEMPLATE_ARGUMENTS_BINARY(
+ BOOST_FUSION_N,
+ typename detail::deduce_ref<,
+ >::type
+ )
+ >
+ type;
+ };
+ }
+
+ VARIADIC_TEMPLATE_A(BOOST_FUSION_N)
+ inline
+#if BOOST_FUSION_N
+ typename
+#endif
+ result_of::BOOST_FUSION_FUNCTION_NAME<
+ EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_LREF(BOOST_FUSION_N)
+ >::type
+ BOOST_FUSION_FUNCTION_NAME(
+ EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_LREF(BOOST_FUSION_N))
+ {
+ return
+#if BOOST_FUSION_N
+ typename
+#endif
+ result_of::BOOST_FUSION_FUNCTION_NAME<
+ EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_LREF(BOOST_FUSION_N)
+ >::type(EXPAND_PARAMETERS_A(BOOST_FUSION_N));
+ }
+
+#undef BOOST_FUSION_N
+
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/make_map.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/make_map.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/make_map.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -69,7 +69,6 @@
};
}
- //TODO cschmidt: ?!
template <typename... Keys, typename... Types>
inline typename
result_of::make_map<Keys...,BOOST_FUSION_R_ELSE_CLREF(Types)...>::type
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/map_tie.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/map_tie.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/generation/detail/variadic_templates/map_tie.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -72,7 +72,6 @@
};
}
- //TODO cschmidt: ?!
template <typename... Keys, typename... Types>
inline typename
result_of::map_tie<Keys...,BOOST_FUSION_R_ELSE_CLREF(Types)...>::type
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/cons_gen.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/cons_gen.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/cons_gen.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,54 +1,25 @@
/*=============================================================================
- Copyright (c) 2009 Christopher Schmidt
+ Copyright (c) 2009-2010 Christopher Schmidt
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)
==============================================================================*/
-#ifndef BOOST_PP_IS_ITERATING
+#ifndef BOOST_FUSION_CONTAINER_LIST_DETAIL_PP_CONS_GEN_HPP
+#define BOOST_FUSION_CONTAINER_LIST_DETAIL_PP_CONS_GEN_HPP
-# ifndef BOOST_FUSION_CONTAINER_LIST_DETAIL_PP_CONS_GEN_HPP
-# define BOOST_FUSION_CONTAINER_LIST_DETAIL_PP_CONS_GEN_HPP
-
-# include <boost/preprocessor/iterate.hpp>
-# include <boost/preprocessor/repetition/enum_shifted_params.hpp>
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/enum_shifted_params.hpp>
namespace boost { namespace fusion { namespace detail
{
VARIADIC_TEMPLATE_WITH_DEFAULT(FUSION_MAX_LIST_SIZE)
struct cons_gen;
-#define BOOST_PP_FILENAME_1 <boost/fusion/container/list/detail/pp/cons_gen.hpp>
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/list/detail/pp/cons_gen_n.hpp>
#define BOOST_PP_ITERATION_LIMITS (0, FUSION_MAX_LIST_SIZE)
#include BOOST_PP_ITERATE()
}}}
-# endif
-
-#else
-
-# define BOOST_FUSION_N BOOST_PP_ITERATION()
-
- VARIADIC_TEMPLATE(BOOST_FUSION_N)
- struct cons_gen
- EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(
- FUSION_MAX_LIST_SIZE,BOOST_FUSION_N)
- {
- public:
-# if BOOST_FUSION_N
- typedef
- cons<
- T0
- , typename cons_gen<
- BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_FUSION_N, T)
- >::type
- >
- type;
-# else
- typedef nil type;
-# endif
- };
-
-# undef BOOST_FUSION_N
-
#endif
+
Added: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/cons_gen_n.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/cons_gen_n.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,31 @@
+/*=============================================================================
+ Copyright (c) 2009-2010 Christopher Schmidt
+
+ 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)
+==============================================================================*/
+
+#define BOOST_FUSION_N BOOST_PP_ITERATION()
+
+ VARIADIC_TEMPLATE(BOOST_FUSION_N)
+ struct cons_gen
+ EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(
+ FUSION_MAX_LIST_SIZE,BOOST_FUSION_N)
+ {
+ public:
+#if BOOST_FUSION_N
+ typedef
+ cons<
+ T0
+ , typename cons_gen<
+ BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_FUSION_N, T)
+ >::type
+ >
+ type;
+#else
+ typedef nil type;
+#endif
+ };
+
+#undef BOOST_FUSION_N
+
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/list_forward_ctor.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/list_forward_ctor.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/list_forward_ctor.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,46 +1,11 @@
/*=============================================================================
- Copyright (c) 2009 Christopher Schmidt
+ Copyright (c) 2009-2010 Christopher Schmidt
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)
==============================================================================*/
-#ifndef BOOST_PP_IS_ITERATING
-# define BOOST_PP_FILENAME_1 <boost/fusion/container/list/detail/pp/list_forward_ctor.hpp>
-# define BOOST_PP_ITERATION_LIMITS (0, FUSION_MAX_LIST_SIZE)
-# include BOOST_PP_ITERATE()
-#else
-# define BOOST_FUSION_N BOOST_PP_ITERATION()
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/list/detail/pp/list_forward_ctor_n.hpp>
+#define BOOST_PP_ITERATION_LIMITS (0, FUSION_MAX_LIST_SIZE)
+#include BOOST_PP_ITERATE()
-# ifndef BOOST_NO_RVALUE_REFERENCES
- VARIADIC_TEMPLATE_A(BOOST_FUSION_N)
-# endif
-# if BOOST_FUSION_N == 1
- explicit
-# endif
-# ifdef BOOST_NO_RVALUE_REFERENCES
- list(EXPAND_TEMPLATE_ARGUMENTS_CALL_PARAMS(BOOST_FUSION_N))
-# else
- list(EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_CLREF(BOOST_FUSION_N))
-# endif
-# if BOOST_FUSION_N
-# if BOOST_FUSION_N <= 1
- : base_type(EXPAND_PARAMETERS_A(BOOST_FUSION_N))
-# else
-# ifdef BOOST_NO_RVALUE_REFERENCES
- : base_type(vector<
- BOOST_PP_ENUM_BINARY_PARAMS(BOOST_FUSION_N,
- typename call_traits<T,
- >::param_type BOOST_PP_INTERCEPT)
- >(EXPAND_PARAMETERS_A(BOOST_FUSION_N)))
-# else
- : base_type(vector<
- BOOST_PP_ENUM_BINARY_PARAMS(N, A,&& BOOST_PP_INTERCEPT)
- >(EXPAND_PARAMETERS_A(BOOST_FUSION_N)))
-# endif
-# endif
-# endif
- {}
-
-# undef BOOST_FUSION_N
-#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/list_forward_ctor_n.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/list/detail/pp/list_forward_ctor_n.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,40 @@
+/*=============================================================================
+ Copyright (c) 2009-2010 Christopher Schmidt
+
+ 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)
+==============================================================================*/
+
+#define BOOST_FUSION_N BOOST_PP_ITERATION()
+
+#ifndef BOOST_NO_RVALUE_REFERENCES
+ VARIADIC_TEMPLATE_A(BOOST_FUSION_N)
+#endif
+#if BOOST_FUSION_N == 1
+ explicit
+#endif
+#ifdef BOOST_NO_RVALUE_REFERENCES
+ list(EXPAND_TEMPLATE_ARGUMENTS_CALL_PARAMS(BOOST_FUSION_N))
+#else
+ list(EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_CLREF(BOOST_FUSION_N))
+#endif
+#if BOOST_FUSION_N
+# if BOOST_FUSION_N <= 1
+ : base_type(EXPAND_PARAMETERS_A(BOOST_FUSION_N))
+# else
+# ifdef BOOST_NO_RVALUE_REFERENCES
+ : base_type(vector<
+ BOOST_PP_ENUM_BINARY_PARAMS(BOOST_FUSION_N,
+ typename call_traits<T,
+ >::param_type BOOST_PP_INTERCEPT)
+ >(EXPAND_PARAMETERS_A(BOOST_FUSION_N)))
+# else
+ : base_type(vector<
+ BOOST_PP_ENUM_BINARY_PARAMS(N, A,&& BOOST_PP_INTERCEPT)
+ >(EXPAND_PARAMETERS_A(BOOST_FUSION_N)))
+# endif
+# endif
+#endif
+ {}
+
+#undef BOOST_FUSION_N
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n_chooser.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n_chooser.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n_chooser.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,59 +1,42 @@
/*=============================================================================
Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2009-2010 Christopher Schmidt
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)
==============================================================================*/
-#ifndef BOOST_PP_IS_ITERATING
-# ifndef BOOST_FUSION_CONTAINER_VECTOR_DETAIL_PP_VECTOR_N_CHOOSER_HPP
-# define BOOST_FUSION_CONTAINER_VECTOR_DETAIL_PP_VECTOR_N_CHOOSER_HPP
+#ifndef BOOST_FUSION_CONTAINER_VECTOR_DETAIL_PP_VECTOR_N_CHOOSER_HPP
+#define BOOST_FUSION_CONTAINER_VECTOR_DETAIL_PP_VECTOR_N_CHOOSER_HPP
-# include <boost/fusion/container/vector/limits.hpp>
+#include <boost/fusion/container/vector/limits.hpp>
// include vector0..N where N is FUSION_MAX_VECTOR_SIZE
-# include <boost/fusion/container/vector/vector10.hpp>
-# if (FUSION_MAX_VECTOR_SIZE > 10)
-# include <boost/fusion/container/vector/vector20.hpp>
-# endif
-# if (FUSION_MAX_VECTOR_SIZE > 20)
-# include <boost/fusion/container/vector/vector30.hpp>
-# endif
-# if (FUSION_MAX_VECTOR_SIZE > 30)
-# include <boost/fusion/container/vector/vector40.hpp>
-# endif
-# if (FUSION_MAX_VECTOR_SIZE > 40)
-# include <boost/fusion/container/vector/vector50.hpp>
-# endif
-# include <boost/fusion/support/internal/template.hpp>
+#include <boost/fusion/container/vector/vector10.hpp>
+#if (FUSION_MAX_VECTOR_SIZE > 10)
+# include <boost/fusion/container/vector/vector20.hpp>
+#endif
+#if (FUSION_MAX_VECTOR_SIZE > 20)
+# include <boost/fusion/container/vector/vector30.hpp>
+#endif
+#if (FUSION_MAX_VECTOR_SIZE > 30)
+# include <boost/fusion/container/vector/vector40.hpp>
+#endif
+#if (FUSION_MAX_VECTOR_SIZE > 40)
+# include <boost/fusion/container/vector/vector50.hpp>
+#endif
+#include <boost/fusion/support/internal/template.hpp>
-# include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/cat.hpp>
namespace boost { namespace fusion { namespace detail
{
VARIADIC_TEMPLATE_WITH_DEFAULT(FUSION_MAX_VECTOR_SIZE)
struct vector_n_chooser;
-# define BOOST_PP_FILENAME_1 <boost/fusion/container/vector/detail/pp/vector_n_chooser.hpp>
-# define BOOST_PP_ITERATION_LIMITS (0, FUSION_MAX_VECTOR_SIZE)
-# include BOOST_PP_ITERATE()
+#define BOOST_PP_FILENAME_1 <boost/fusion/container/vector/detail/pp/vector_n_chooser_n.hpp>
+#define BOOST_PP_ITERATION_LIMITS (0, FUSION_MAX_VECTOR_SIZE)
+#include BOOST_PP_ITERATE()
}}}
-# endif
-#else
-# define BOOST_FUSION_N BOOST_PP_ITERATION()
-
- VARIADIC_TEMPLATE(BOOST_FUSION_N)
- struct vector_n_chooser
- EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(
- FUSION_MAX_VECTOR_SIZE,BOOST_FUSION_N)
- {
- typedef
- BOOST_PP_CAT(vector, BOOST_FUSION_N)<
- EXPAND_TEMPLATE_ARGUMENTS(BOOST_FUSION_N)
- >
- type;
- };
-
-# undef BOOST_FUSION_N
#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n_chooser_n.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/pp/vector_n_chooser_n.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,24 @@
+/*=============================================================================
+ Copyright (c) 2001-2006 Joel de Guzman
+ Copyright (c) 2009-2010 Christopher Schmidt
+
+ 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)
+==============================================================================*/
+
+#define BOOST_FUSION_N BOOST_PP_ITERATION()
+
+ VARIADIC_TEMPLATE(BOOST_FUSION_N)
+ struct vector_n_chooser
+ EXPAND_TEMPLATE_ARGUMENTS_SPECIALIZATION(
+ FUSION_MAX_VECTOR_SIZE,BOOST_FUSION_N)
+ {
+ typedef
+ BOOST_PP_CAT(vector, BOOST_FUSION_N)<
+ EXPAND_TEMPLATE_ARGUMENTS(BOOST_FUSION_N)
+ >
+ type;
+ };
+
+#undef BOOST_FUSION_N
+
Modified: sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector_n.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector_n.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/container/vector/detail/variadic_templates/vector_n.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -91,6 +91,6 @@
};
}}
- #undef N
+ #undef BOOST_FUSION_N
#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/detail/fused_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/detail/fused_impl.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,125 @@
+/*=============================================================================
+ Copyright (c) 2009-2010 Christopher Schmidt
+
+ 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)
+==============================================================================*/
+
+#include <boost/config.hpp>
+#include <boost/fusion/support/internal/ref.hpp>
+#include <boost/fusion/support/internal/result_of.hpp>
+#include <boost/fusion/support/internal/assert.hpp>
+#include <boost/preprocessor/empty.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/type_traits/add_const.hpp>
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+# include <boost/call_traits.hpp>
+#endif
+
+namespace boost { namespace fusion
+{
+ template<typename F>
+ struct BOOST_PP_CAT(fused,BOOST_FUSION_ADAPTER_POSTFIX)
+ {
+ template<typename Sig>
+ struct result;
+
+ template<class Self, class Seq>
+ struct result<Self(Seq)>
+ : result_of::BOOST_PP_CAT(invoke,BOOST_FUSION_ADAPTER_POSTFIX)<
+ typename detail::forward_as<Self,F>::type
+ , Seq
+ >
+ {};
+
+ BOOST_PP_CAT(fused,BOOST_FUSION_ADAPTER_POSTFIX)()
+ : f()
+ {}
+
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+ BOOST_PP_CAT(fused,BOOST_FUSION_ADAPTER_POSTFIX)(
+ typename call_traits<F>::param_type f)
+ : f(f)
+ {}
+#else
+ template<typename... Args>
+ BOOST_PP_CAT(fused,BOOST_FUSION_ADAPTER_POSTFIX)(
+ BOOST_FUSION_R_ELSE_CLREF(Args)... args)
+ : f(BOOST_FUSION_FORWARD(Args,args)...)
+ {}
+
+# ifdef BOOST_NO_RVALUE_REFERENCES
+ template<typename... Args>
+ BOOST_PP_CAT(fused,BOOST_FUSION_ADAPTER_POSTFIX)(Args&... args)
+ : f(args...)
+ {}
+# endif
+#endif
+
+#define BOOST_FUSION_CTOR_SPECIALIZATION(MODIFIER,_)\
+ BOOST_PP_CAT(fused,BOOST_FUSION_ADAPTER_POSTFIX)(\
+ BOOST_PP_CAT(fused,BOOST_FUSION_ADAPTER_POSTFIX) MODIFIER adapter)\
+ : f(static_cast<\
+ BOOST_PP_CAT(fused,BOOST_FUSION_ADAPTER_POSTFIX) MODIFIER\
+ >(adapter).f)\
+ {}
+
+ BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_CTOR_SPECIALIZATION,_)
+
+#undef BOOST_FUSION_CTOR_SPECIALIZATION
+
+ template<typename OtherF>
+ BOOST_PP_CAT(fused,BOOST_FUSION_ADAPTER_POSTFIX)&
+ operator=(BOOST_FUSION_RREF_ELSE_OBJ(OtherF) other_f)
+ {
+ f=BOOST_FUSION_FORWARD(OtherF, other_f);
+ return *this;
+ }
+
+#define BOOST_FUSION_ASSIGN_SPECIALIZATION(MODIFIER,_)\
+ BOOST_PP_CAT(fused,BOOST_FUSION_ADAPTER_POSTFIX)&\
+ operator=(BOOST_PP_CAT(fused,BOOST_FUSION_ADAPTER_POSTFIX) MODIFIER\
+ other_adapter)\
+ {\
+ f=static_cast<\
+ BOOST_PP_CAT(fused,BOOST_FUSION_ADAPTER_POSTFIX) MODIFIER\
+ >(other_adapter).f;\
+ return *this;\
+ }
+
+ BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_ASSIGN_SPECIALIZATION,_)
+
+#undef BOOST_FUSION_ASSIGN_SPECIALIZATION
+
+#define BOOST_FUSION_CALL_OPERATOR(F, SEQ_MODIFIER, MODIFIER)\
+ template<typename Seq>\
+ typename result_of::BOOST_PP_CAT(invoke,BOOST_FUSION_ADAPTER_POSTFIX)<\
+ F\
+ , Seq SEQ_MODIFIER\
+ >::type\
+ operator()(Seq SEQ_MODIFIER seq) MODIFIER\
+ {\
+ /*BOOST_FUSION_MPL_ASSERT((traits::is_sequence<Seq>));*/\
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));\
+ \
+ return fusion::BOOST_PP_CAT(invoke,BOOST_FUSION_ADAPTER_POSTFIX)<F>(\
+ f,\
+ static_cast<Seq SEQ_MODIFIER>(seq));\
+ }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+ BOOST_FUSION_CALL_OPERATOR(F,&,BOOST_PP_EMPTY());
+ BOOST_FUSION_CALL_OPERATOR(F,const&,BOOST_PP_EMPTY());
+ BOOST_FUSION_CALL_OPERATOR(typename add_const<F>::type,&,const);
+ BOOST_FUSION_CALL_OPERATOR(typename add_const<F>::type,const&,const);
+#else
+ BOOST_FUSION_CALL_OPERATOR(F,&&,BOOST_PP_EMPTY());
+ BOOST_FUSION_CALL_OPERATOR(typename add_const<F>::type,&&,const);
+#endif
+
+#undef BOOST_FUSION_CALL_OPERATOR
+
+ F f;
+ };
+}}
+
Added: sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/detail/pp/unfused_invocation_n.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/detail/pp/unfused_invocation_n.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,50 @@
+/*=============================================================================
+ Copyright (c) 2010 Christopher Schmidt
+
+ 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)
+==============================================================================*/
+
+#define BOOST_FUSION_N BOOST_PP_ITERATION()
+
+ template<
+ typename Self
+#if BOOST_FUSION_N > 0
+ , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename T)
+#endif
+ >
+ struct result<Self(EXPAND_TEMPLATE_ARGUMENTS(BOOST_FUSION_N))>
+ : boost::result_of<
+ typename detail::get_func_base<
+ typename detail::forward_as<Self,F>::type
+ >::type(BOOST_FUSION_R_ELSE_LREF(
+ BOOST_PP_IF(BOOST_FUSION_N, typename, BOOST_PP_EMPTY())
+ result_of::vector_tie<
+ EXPAND_TEMPLATE_ARGUMENTS(BOOST_FUSION_N)
+ >::type))
+ >
+ {};
+
+#define BOOST_FUSION_CALL_OPERATOR(F,MODIFIER)\
+ VARIADIC_TEMPLATE_A(BOOST_FUSION_N)\
+ typename boost::result_of<\
+ typename detail::get_func_base<F>::type(\
+ BOOST_FUSION_R_ELSE_LREF(\
+ BOOST_PP_IF(BOOST_FUSION_N, typename, BOOST_PP_EMPTY())\
+ result_of::vector_tie<\
+ EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_LREF(BOOST_FUSION_N)\
+ >::type))\
+ >::type\
+ operator()(EXPAND_TEMPLATE_ARGUMENTS_PARAMETERS_A_R_ELSE_LREF(\
+ BOOST_FUSION_N)) MODIFIER\
+ {\
+ return f(fusion::vector_tie(EXPAND_PARAMETERS_A(BOOST_FUSION_N)));\
+ }
+
+ BOOST_FUSION_CALL_OPERATOR(F,BOOST_PP_EMPTY());
+ BOOST_FUSION_CALL_OPERATOR(typename add_const<F>::type,const);
+
+#undef BOOST_FUSION_CALL_OPERATOR
+
+#undef BOOST_FUSION_N
+
Added: sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/detail/pp/unfused_typed_impl_n.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/detail/pp/unfused_typed_impl_n.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,77 @@
+/*=============================================================================
+ Copyright (c) 2010 Christopher Schmidt
+
+ 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)
+==============================================================================*/
+
+#define BOOST_FUSION_N BOOST_PP_ITERATION()
+
+ template<typename F, typename TransformSeq>
+ struct unfused_typed_impl<BOOST_FUSION_N, F, TransformSeq>
+ {
+ typedef typename
+ result_of::as_vector<BOOST_FUSION_R_ELSE_CLREF(TransformSeq)>::type
+ transformed_args;
+ typedef BOOST_FUSION_R_ELSE_LREF(transformed_args) transformed_args_arg;
+
+ template<typename Sig>
+ struct result;
+
+ template<
+ typename Self
+#if BOOST_FUSION_N > 0
+ , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, typename T)
+#endif
+ >
+ struct result<Self(EXPAND_TEMPLATE_ARGUMENTS(BOOST_FUSION_N))>
+ : boost::result_of<
+ typename detail::get_func_base<
+ typename detail::forward_as<Self,F>::type
+ >::type(transformed_args_arg)
+ >
+ {};
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+# define BOOST_FUSION_CALL_PARAMETER(Z,N,__)\
+ typename call_traits<\
+ typename result_of::value_at_c<transformed_args,N>::type\
+ >::param_type BOOST_PP_CAT(_,N)
+
+# define BOOST_FUSION_CALL_OPERATOR(F_,MODIFIER)\
+ typename boost::result_of<\
+ typename detail::get_func_base<F_>::type(transformed_args_arg)\
+ >::type\
+ operator()(BOOST_PP_ENUM(BOOST_FUSION_N,BOOST_FUSION_CALL_PARAMETER,_))\
+ MODIFIER\
+ {\
+ return static_cast<unfused_typed<F,TransformSeq> MODIFIER&>(*this).\
+ f(fusion::as_vector(TransformSeq(\
+ EXPAND_PARAMETERS_A(BOOST_FUSION_N))));\
+ }
+#else
+# define BOOST_FUSION_CALL_OPERATOR(F_,MODIFIER)\
+ BOOST_FUSION_VARIADIC_TEMPLATES_A(BOOST_FUSION_N)\
+ typename boost::result_of<\
+ typename detail::get_func_base<F_>::type(transformed_args_arg)\
+ >::type\
+ operator()(EXPAND_TEMPLATE_ARGUMENTS_A_R_ELSE_LREF(BOOST_FUSION_N))\
+ MODIFIER\
+ {\
+ return static_cast<unfused_typed<F,TransformSeq> MODIFIER&>(*this).\
+ f(fusion::as_vector(TransformSeq(\
+ EXPAND_PARAMETERS_A(BOOST_FUSION_N))));\
+ }
+#endif
+
+ BOOST_FUSION_CALL_OPERATOR(F,BOOST_PP_EMPTY());
+ BOOST_FUSION_CALL_OPERATOR(typename add_const<F>::type,const);
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+# undef BOOST_FUSION_CALL_PARAMETER
+#endif
+#undef BOOST_FUSION_CALL_OPERATOR
+ };
+
+#undef BOOST_FUSION_N
+
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/fused.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/fused.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/fused.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,5 +1,6 @@
/*=============================================================================
- Copyright (c) 2009 Christopher Schmidt
+ Copyright (c) 2006-2007 Tobias Schwinger
+ Copyright (c) 2009-2010 Christopher Schmidt
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)
@@ -8,13 +9,10 @@
#ifndef BOOST_FUSION_FUNCTIONAL_ADAPTER_FUSED_HPP
#define BOOST_FUSION_FUNCTIONAL_ADAPTER_FUSED_HPP
-#include <boost/config.hpp>
-#if defined(BOOST_NO_DECLTYPE) || defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES) //|| 1
-# include <boost/fusion/functional/adapter/detail/no_0x/fused.hpp>
-#else
-# define BOOST_FUSION_ADAPTER_NAME fused
-# include <boost/fusion/functional/adapter/detail/0x/fused_impl.hpp>
-# undef BOOST_FUSION_ADAPTER_NAME
-#endif
+#include <boost/fusion/functional/invocation/invoke.hpp>
+
+#define BOOST_FUSION_ADAPTER_POSTFIX
+#include <boost/fusion/functional/adapter/detail/fused_impl.hpp>
+#undef BOOST_FUSION_ADAPTER_POSTFIX
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/fused_function_object.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/fused_function_object.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/fused_function_object.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,5 +1,6 @@
/*=============================================================================
- Copyright (c) 2009 Christopher Schmidt
+ Copyright (c) 2006-2007 Tobias Schwinger
+ Copyright (c) 2009-2010 Christopher Schmidt
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)
@@ -8,13 +9,10 @@
#ifndef BOOST_FUSION_FUNCTIONAL_ADAPTER_FUSED_FUNCTION_OBJECT_HPP
#define BOOST_FUSION_FUNCTIONAL_ADAPTER_FUSED_FUNCTION_OBJECT_HPP
-#include <boost/config.hpp>
-#if defined(BOOST_NO_DECLTYPE) || defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES) //|| 1
-# include <boost/fusion/functional/adapter/detail/no_0x/fused_function_object.hpp>
-#elif !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED)
-# define BOOST_FUSION_ADAPTER_NAME fused_function_object
-# include <boost/fusion/functional/adapter/detail/0x/fused_impl.hpp>
-# undef BOOST_FUSION_ADAPTER_NAME
-#endif
+#include <boost/fusion/functional/invocation/invoke_function_object.hpp>
+
+#define BOOST_FUSION_ADAPTER_POSTFIX _function_object
+#include <boost/fusion/functional/adapter/detail/fused_impl.hpp>
+#undef BOOST_FUSION_ADAPTER_POSTFIX
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/fused_procedure.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/fused_procedure.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/fused_procedure.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,5 +1,6 @@
/*=============================================================================
- Copyright (c) 2009 Christopher Schmidt
+ Copyright (c) 2006-2007 Tobias Schwinger
+ Copyright (c) 2009-2010 Christopher Schmidt
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)
@@ -8,13 +9,10 @@
#ifndef BOOST_FUSION_FUNCTIONAL_ADAPTER_FUSED_PROCEDURE_HPP
#define BOOST_FUSION_FUNCTIONAL_ADAPTER_FUSED_PROCEDURE_HPP
-#include <boost/config.hpp>
-#if defined(BOOST_NO_DECLTYPE) || defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES) //|| 1
-# include <boost/fusion/functional/adapter/detail/no_0x/fused_procedure.hpp>
-#elif !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED)
-# define BOOST_FUSION_ADAPTER_NAME fused_procedure
-# include <boost/fusion/functional/adapter/detail/0x/fused_impl.hpp>
-# undef BOOST_FUSION_ADAPTER_NAME
-#endif
+#include <boost/fusion/functional/invocation/invoke_procedure.hpp>
+
+#define BOOST_FUSION_ADAPTER_POSTFIX _procedure
+#include <boost/fusion/functional/adapter/detail/fused_impl.hpp>
+#undef BOOST_FUSION_ADAPTER_NAME
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/limits.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/limits.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/limits.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,6 +1,6 @@
/*=============================================================================
Copyright (c) 2006-2007 Tobias Schwinger
- Copyright (c) 2009 Christopher Schmidt
+ Copyright (c) 2009-2010 Christopher Schmidt
Use modification and distribution are subject to the Boost Software
License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -12,7 +12,7 @@
#include <boost/config.hpp>
-#if defined(BOOST_NO_DECLTYPE) || defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES) || !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED) //|| 1
+#if defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES) || !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED)
# include <boost/fusion/container/vector/limits.hpp>
# ifndef BOOST_FUSION_UNFUSED_MAX_ARITY
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/unfused.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/unfused.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/unfused.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,5 +1,6 @@
/*=============================================================================
- Copyright (c) 2009 Christopher Schmidt
+ Copyright (c) 2006-2007 Tobias Schwinger
+ Copyright (c) 2009-2010 Christopher Schmidt
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)
@@ -9,10 +10,118 @@
#define BOOST_FUSION_FUNCTIONAL_ADAPTER_UNFUSED_HPP
#include <boost/config.hpp>
-#if defined(BOOST_NO_DECLTYPE) || defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES) //|| 1
-# include <boost/fusion/functional/adapter/detail/no_0x/unfused.hpp>
-#elif !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED)
-# include <boost/fusion/functional/adapter/detail/0x/unfused_impl.hpp>
+#include <boost/fusion/container/generation/vector_tie.hpp>
+#include <boost/fusion/functional/adapter/limits.hpp>
+#include <boost/fusion/support/internal/ref.hpp>
+#include <boost/fusion/support/internal/result_of.hpp>
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+# include <boost/fusion/support/internal/template.hpp>
+# include <boost/preprocessor/iterate.hpp>
#endif
+#include <boost/preprocessor/empty.hpp>
+#include <boost/type_traits/add_const.hpp>
+
+namespace boost { namespace fusion
+{
+ template<
+ typename F
+ //TODO remove?
+ , bool=true
+ >
+ struct unfused
+ {
+ template<typename Sig>
+ struct result;
+
+#ifndef BOOST_NO_VARIADIC_TEMPLATES
+ template<typename Self, typename... Args>
+ struct result<Self(Args...)>
+ : boost::result_of<
+ typename detail::get_func_base<
+ typename detail::forward_as<Self,F>::type
+ >::type(BOOST_FUSION_R_ELSE_LREF(
+ typename result_of::vector_tie<Args...>::type))
+ >
+ {};
+#endif
+
+ unfused()
+ : f()
+ {}
+
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+ unfused(typename call_traits<F>::param_type f)
+ : f(f)
+ {}
+#else
+ template<typename... Args>
+ unfused(BOOST_FUSION_R_ELSE_CLREF(Args)... args)
+ : f(BOOST_FUSION_FORWARD(Args,args)...)
+ {}
+
+# ifdef BOOST_NO_RVALUE_REFERENCES
+ template<typename... Args>
+ unfused(Args&... args)
+ : f(args...)
+ {}
+# endif
+#endif
+
+#define BOOST_FUSION_CTOR_SPECIALIZATION(MODIFIER,_)\
+ unfused(unfused MODIFIER adapter)\
+ : f(static_cast<unfused MODIFIER>(adapter).f)\
+ {}
+
+ BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_CTOR_SPECIALIZATION,_)
+
+#undef BOOST_FUSION_CTOR_SPECIALIZATION
+
+ template<typename OtherF>
+ unfused&
+ operator=(BOOST_FUSION_RREF_ELSE_OBJ(OtherF) other_f)
+ {
+ f=BOOST_FUSION_FORWARD(OtherF,other_f);
+ return *this;
+ }
+
+#define BOOST_FUSION_ASSIGN_SPECIALIZATION(MODIFIER,_)\
+ unfused&\
+ operator=(unfused MODIFIER other_adapter)\
+ {\
+ f=static_cast<unfused MODIFIER>(other_adapter).f;\
+ return *this;\
+ }
+
+ BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_ASSIGN_SPECIALIZATION,_)
+
+#undef BOOST_FUSION_ASSIGN_SPECIALIZATION
+
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+# define BOOST_PP_FILENAME_1 <boost/fusion/functional/adapter/detail/pp/unfused_invocation_n.hpp>
+# define BOOST_PP_ITERATION_LIMITS (0, BOOST_FUSION_UNFUSED_MAX_ARITY)
+# include BOOST_PP_ITERATE()
+#else
+# define BOOST_FUSION_CALL_OPERATOR(F,MODIFIER)\
+ template<typename... Args>\
+ typename boost::result_of<\
+ typename detail::get_func_base<F>::type(\
+ BOOST_FUSION_R_ELSE_LREF(typename result_of::vector_tie<\
+ BOOST_FUSION_R_ELSE_LREF(Args)...\
+ >::type))\
+ >::type\
+ operator()(BOOST_FUSION_R_ELSE_LREF(Args)... args) MODIFIER\
+ {\
+ return f(fusion::vector_tie(BOOST_FUSION_FORWARD(Args,args)...));\
+ }
+
+ BOOST_FUSION_CALL_OPERATOR(F,BOOST_PP_EMPTY());
+ BOOST_FUSION_CALL_OPERATOR(typename add_const<F>::type,const);
+
+# undef BOOST_FUSION_CALL_OPERATOR
+#endif
+
+ F f;
+ };
+}}
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/unfused_typed.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/unfused_typed.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/adapter/unfused_typed.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,5 +1,6 @@
/*=============================================================================
- Copyright (c) 2009 Christopher Schmidt
+ Copyright (c) 2006-2007 Tobias Schwinger
+ Copyright (c) 2009-2010 Christopher Schmidt
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)
@@ -9,12 +10,146 @@
#define BOOST_FUSION_FUNCTIONAL_ADAPTER_UNFUSED_TYPED_HPP
#include <boost/config.hpp>
-#if defined(BOOST_NO_DECLTYPE) || defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES) //|| 1
-# include <boost/fusion/functional/adapter/detail/no_0x/unfused_typed.hpp>
+#if defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES)
+# include <boost/fusion/sequence/intrinsic/size.hpp>
+# ifdef BOOST_NO_RVALUE_REFERENCES
+# include <boost/fusion/sequence/intrinsic/value_at.hpp>
+# endif
+#endif
+#include <boost/fusion/container/vector/convert.hpp>
+#include <boost/fusion/functional/adapter/limits.hpp>
+#include <boost/fusion/support/internal/ref.hpp>
+#include <boost/fusion/support/internal/result_of.hpp>
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+# include <boost/fusion/support/internal/template.hpp>
+# include <boost/preprocessor/iterate.hpp>
+#endif
+#include <boost/preprocessor/empty.hpp>
+#include <boost/type_traits/add_const.hpp>
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+# include <boost/call_traits.hpp>
+#endif
+
+//TODO cschmidt: tagged variadic, non-rvalue implementation
+
+namespace boost { namespace fusion
+{
+#if defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES)
+ template<typename F, typename TransformSeq>
+ struct unfused_typed;
+
+ namespace detail
+ {
+ template<int SeqSize, typename F, typename TransformSeq>
+ struct unfused_typed_impl;
+
+# define BOOST_PP_FILENAME_1 <boost/fusion/functional/adapter/detail/pp/unfused_typed_impl_n.hpp>
+# define BOOST_PP_ITERATION_LIMITS (0, BOOST_FUSION_UNFUSED_TYPED_MAX_ARITY)
+# include BOOST_PP_ITERATE()
+ }
+#endif
+
+ template<typename F, typename TransformSeq>
+ struct unfused_typed
+#if defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES)
+ : detail::unfused_typed_impl<
+ result_of::size<TransformSeq>::value
+ , F
+ , TransformSeq
+ >
+#endif
+ {
+#if !defined(BOOST_NO_VARIADIC_TEMPLATES) && !defined(BOOST_NO_RVALUE_REFERENCES)
+ typedef typename
+ result_of::as_vector<BOOST_FUSION_R_ELSE_CLREF(TransformSeq)>::type
+ transformed_args;
+
+ template<typename Sig>
+ struct result;
+
+ template<typename Self, typename... Args>
+ struct result<Self(Args...)>
+ : boost::result_of<
+ typename detail::get_func_base<
+ typename detail::forward_as<Self,F>::type
+ >::type(transformed_args&&)
+ >
+ {};
+#endif
+
+ unfused_typed()
+ : f()
+ {}
+
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+ unfused_typed(typename call_traits<F>::param_type f)
+ : f(f)
+ {}
#else
-# define BOOST_FUSION_TYPED
-# include <boost/fusion/functional/adapter/detail/0x/unfused_impl.hpp>
-# undef BOOST_FUSION_TYPED
+ template<typename... Args>
+ unfused_typed(BOOST_FUSION_R_ELSE_CLREF(Args)... args)
+ : f(BOOST_FUSION_FORWARD(Args,args)...)
+ {}
+
+# ifdef BOOST_NO_RVALUE_REFERENCES
+ template<typename... Args>
+ unfused_typed(Args&... args)
+ : f(args...)
+ {}
+# endif
+#endif
+
+#define BOOST_FUSION_CTOR_SPECIALIZATION(MODIFIER,_)\
+ unfused_typed(unfused_typed MODIFIER adapter)\
+ : f(static_cast<unfused_typed MODIFIER>(adapter).f)\
+ {}
+
+ BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_CTOR_SPECIALIZATION,_)
+
+#undef BOOST_FUSION_CTOR_SPECIALIZATION
+
+ template<typename OtherF>
+ unfused_typed&
+ operator=(BOOST_FUSION_RREF_ELSE_OBJ(OtherF) other_f)
+ {
+ f=BOOST_FUSION_FORWARD(OtherF,other_f);
+ return *this;
+ }
+
+#define BOOST_FUSION_ASSIGN_SPECIALIZATION(MODIFIER,_)\
+ unfused_typed&\
+ operator=(unfused_typed MODIFIER other_adapter)\
+ {\
+ f=static_cast<unfused_typed MODIFIER>(other_adapter).f;\
+ return *this;\
+ }
+
+ BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_ASSIGN_SPECIALIZATION,_)
+
+#undef BOOST_FUSION_ASSIGN_SPECIALIZATION
+
+#if !defined(BOOST_NO_VARIADIC_TEMPLATES) && !defined(BOOST_NO_RVALUE_REFERENCES)
+# define BOOST_FUSION_CALL_OPERATOR(F,MODIFIER)\
+ template<typename... Args>\
+ typename boost::result_of<\
+ typename detail::get_func_base<F>::type(transformed_args&&)\
+ >::type\
+ operator()(Args&&... args) MODIFIER\
+ {\
+ return f(fusion::as_vector(\
+ TransformSeq(std::forward<Args>(args)...)));\
+ }
+
+ BOOST_FUSION_CALL_OPERATOR(F,BOOST_PP_EMPTY());
+ BOOST_FUSION_CALL_OPERATOR(typename add_const<F>::type,const);
+
+# undef BOOST_FUSION_CALL_OPERATOR
#endif
+ F f;
+ };
+}}
+
+#undef BOOST_FUSION_ADAPTER_NAME
+
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/generation/detail/gen_make_adapter.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/generation/detail/gen_make_adapter.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/generation/detail/gen_make_adapter.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,6 +1,6 @@
/*=============================================================================
Copyright (c) 2007 Tobias Schwinger
-
+
Use modification and distribution are subject to 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).
@@ -11,7 +11,7 @@
#include <boost/preprocessor/cat.hpp>
-#define BOOST_FUSION_FUNC_NAME BOOST_PP_CAT(make_,BOOST_FUSION_CLASS_TPL_NAME)
+#define BOOST_FUSION_FUNC_NAME BOOST_PP_CAT(make_,BOOST_FUSION_FUSED_CLASS_NAME)
namespace boost { namespace fusion
{
@@ -21,7 +21,7 @@
struct BOOST_FUSION_FUNC_NAME
{
typedef
- BOOST_FUSION_CLASS_TPL_NAME<
+ BOOST_FUSION_FUSED_CLASS_NAME<
typename traits::deduce<F>::type
>
type;
@@ -39,5 +39,5 @@
}
}}
-#undef BOOST_FUSION_CLASS_TPL_NAME
+#undef BOOST_FUSION_FUSED_CLASS_NAME
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_fused.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_fused.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_fused.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,6 +1,6 @@
/*=============================================================================
Copyright (c) 2007 Tobias Schwinger
-
+
Use modification and distribution are subject to 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).
@@ -9,13 +9,10 @@
#ifndef BOOST_FUSION_FUNCTIONAL_GENERATION_MAKE_FUSED_HPP
#define BOOST_FUSION_FUNCTIONAL_GENERATION_MAKE_FUSED_HPP
-#include <boost/config.hpp>
-#if defined(BOOST_NO_DECLTYPE) || defined(BOOST_NO_VARIADIC_TEMPLATES) || !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED) //|| 1
-# include <boost/fusion/functional/adapter/fused.hpp>
+#include <boost/fusion/functional/adapter/fused.hpp>
-# define BOOST_FUSION_CLASS_TPL_NAME fused
-# include <boost/fusion/functional/generation/detail/gen_make_adapter.hpp>
-# undef BOOST_FUSION_CLASS_TPL_NAME
-#endif
+#define BOOST_FUSION_FUSED_CLASS_NAME fused
+#include <boost/fusion/functional/generation/detail/gen_make_adapter.hpp>
+#undef BOOST_FUSION_FUSED_CLASS_NAME
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_fused_function_object.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_fused_function_object.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_fused_function_object.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,6 +1,6 @@
/*=============================================================================
Copyright (c) 2007 Tobias Schwinger
-
+
Use modification and distribution are subject to 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).
@@ -9,13 +9,10 @@
#ifndef BOOST_FUSION_FUNCTIONAL_GENERATION_MAKE_FUSED_FUNCTION_OBJECT_HPP
#define BOOST_FUSION_FUNCTIONAL_GENERATION_MAKE_FUSED_FUNCTION_OBJECT_HPP
-#include <boost/config.hpp>
-#if defined(BOOST_NO_DECLTYPE) || defined(BOOST_NO_VARIADIC_TEMPLATES) || !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED) //|| 1
-# include <boost/fusion/functional/adapter/fused_function_object.hpp>
+#include <boost/fusion/functional/adapter/fused_function_object.hpp>
-# define BOOST_FUSION_CLASS_TPL_NAME fused_function_object
-# include <boost/fusion/functional/generation/detail/gen_make_adapter.hpp>
-# undef BOOST_FUSION_CLASS_TPL_NAME
-#endif
+#define BOOST_FUSION_FUSED_CLASS_NAME fused_function_object
+#include <boost/fusion/functional/generation/detail/gen_make_adapter.hpp>
+#undef BOOST_FUSION_FUSED_CLASS_NAME
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_fused_procedure.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_fused_procedure.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_fused_procedure.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,6 +1,6 @@
/*=============================================================================
Copyright (c) 2007 Tobias Schwinger
-
+
Use modification and distribution are subject to 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).
@@ -9,13 +9,10 @@
#ifndef BOOST_FUSION_FUNCTIONAL_GENERATION_MAKE_FUSED_PROCEDURE_HPP
#define BOOST_FUSION_FUNCTIONAL_GENERATION_MAKE_FUSED_PROCEDURE_HPP
-#include <boost/config.hpp>
-#if defined(BOOST_NO_DECLTYPE) || defined(BOOST_NO_VARIADIC_TEMPLATES) || !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED) //|| 1
-# include <boost/fusion/functional/adapter/fused_procedure.hpp>
+#include <boost/fusion/functional/adapter/fused_procedure.hpp>
-# define BOOST_FUSION_CLASS_TPL_NAME fused_procedure
-# include <boost/fusion/functional/generation/detail/gen_make_adapter.hpp>
-# undef BOOST_FUSION_CLASS_TPL_NAME
-#endif
+#define BOOST_FUSION_FUSED_CLASS_NAME fused_procedure
+#include <boost/fusion/functional/generation/detail/gen_make_adapter.hpp>
+#undef BOOST_FUSION_FUSED_CLASS_NAME
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_unfused.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_unfused.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/generation/make_unfused.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,6 +1,6 @@
/*=============================================================================
Copyright (c) 2007 Tobias Schwinger
-
+
Use modification and distribution are subject to 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).
@@ -9,13 +9,10 @@
#ifndef BOOST_FUSION_FUNCTIONAL_GENERATION_MAKE_UNFUSED_HPP
#define BOOST_FUSION_FUNCTIONAL_GENERATION_MAKE_UNFUSED_HPP
-#include <boost/config.hpp>
-# if defined(BOOST_NO_DECLTYPE) || defined(BOOST_NO_VARIADIC_TEMPLATES) || !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED) //|| 1
-# include <boost/fusion/functional/adapter/unfused.hpp>
+#include <boost/fusion/functional/adapter/unfused.hpp>
-# define BOOST_FUSION_CLASS_TPL_NAME unfused
-# include <boost/fusion/functional/generation/detail/gen_make_adapter.hpp>
-# undef BOOST_FUSION_CLASS_TPL_NAME
-#endif
+#define BOOST_FUSION_FUSED_CLASS_NAME unfused
+#include <boost/fusion/functional/generation/detail/gen_make_adapter.hpp>
+#undef BOOST_FUSION_FUSED_CLASS_NAME
#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/invoke.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/invoke.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,62 @@
+/*=============================================================================
+ Copyright (c) 2009-2010 Christopher Schmidt
+
+ 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)
+==============================================================================*/
+
+#include <boost/config.hpp>
+#include <boost/fusion/support/internal/ref.hpp>
+#include <boost/fusion/support/internal/assert.hpp>
+
+#if defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES)
+# include <boost/fusion/functional/invocation/detail/pp/invoke_impl.hpp>
+#else
+# include <boost/fusion/functional/invocation/detail/variadic_templates/invoke_impl.hpp>
+#endif
+
+namespace boost { namespace fusion
+{
+ namespace result_of
+ {
+ template<typename F, typename Seq>
+ struct BOOST_FUSION_INVOKE_NAME
+ : detail::BOOST_FUSION_INVOKE_NAME<
+#ifdef BOOST_NO_RVALUE_REFERENCES
+ typename traits::deduce<F>::type
+#else
+ typename traits::deduce_ref<F>::type
+#endif
+ , typename detail::add_lref<Seq>::type
+ >
+ {
+ BOOST_FUSION_MPL_ASSERT((traits::is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_forward<Seq>));
+ };
+ }
+
+ template <typename F, typename Seq>
+ inline typename result_of::BOOST_FUSION_INVOKE_NAME<
+ BOOST_FUSION_RREF_ELSE_OBJ(F)
+ , BOOST_FUSION_R_ELSE_CLREF(Seq)
+ >::type
+ BOOST_FUSION_INVOKE_NAME(
+ BOOST_FUSION_RREF_ELSE_OBJ(F) f,
+ BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
+ {
+ return result_of::BOOST_FUSION_INVOKE_NAME<
+ BOOST_FUSION_RREF_ELSE_OBJ(F)
+ , BOOST_FUSION_R_ELSE_CLREF(Seq)
+ >::call(f,seq);
+ }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+ template <typename F, typename Seq>
+ inline typename result_of::BOOST_FUSION_INVOKE_NAME<F,Seq&>::type
+ BOOST_FUSION_INVOKE_NAME(F f,Seq& seq)
+ {
+ return result_of::BOOST_FUSION_INVOKE_NAME<F,Seq&>::call(f,seq);
+ }
+#endif
+}}
+
Added: sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/member_object_pointer_helper.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/member_object_pointer_helper.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,120 @@
+/*=============================================================================
+ Copyright (c) 2009-2010 Christopher Schmidt
+
+ 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)
+==============================================================================*/
+
+#ifndef BOOST_FUSION_FUNCTIONAL_INVOCATION_DETAIL_MEMBER_OBJECT_POINTER_HELPER_HPP
+#define BOOST_FUSION_FUNCTIONAL_INVOCATION_DETAIL_MEMBER_OBJECT_POINTER_HELPER_HPP
+
+#include <boost/fusion/sequence/intrinsic/front.hpp>
+#include <boost/fusion/functional/invocation/detail/that_ptr.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/type_traits/is_base_of.hpp>
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/is_volatile.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ template<typename>
+ struct split_object_pointer;
+
+ template<class Type,class Class>
+ struct split_object_pointer<Type(Class::*)>
+ {
+ typedef Type type;
+ typedef Class class_type;
+ };
+
+ template<class Type,class Class>
+ struct split_object_pointer<Type(Class::* const)>
+ {
+ typedef Type type;
+ typedef Class class_type;
+ };
+
+ template<class Type,class Class>
+ struct split_object_pointer<Type(Class::* volatile)>
+ {
+ typedef Type type;
+ typedef Class class_type;
+ };
+
+ template<class Type,class Class>
+ struct split_object_pointer<Type(Class::* const volatile)>
+ {
+ typedef Type type;
+ typedef Class class_type;
+ };
+
+ template<typename Instance, typename Sig>
+ struct get_object_pointer_result_type
+ {
+ typedef typename split_object_pointer<Sig>::type object_type;
+ typedef typename split_object_pointer<Sig>::class_type class_type;
+ typedef typename
+ remove_reference<Instance>::type
+ nonref_class_instance;
+ typedef typename identity<Instance>::type identity_class_instance;
+
+ typedef typename
+ is_base_of<
+ class_type
+ , identity_class_instance
+ >::type
+ is_directly_convertible;
+
+ typedef typename
+ mpl::if_<
+ mpl::or_<
+ is_const<object_type>
+ , mpl::and_<
+ is_directly_convertible
+ , is_const<nonref_class_instance>
+ >
+ , mpl::and_<
+ mpl::not_<is_directly_convertible>
+ , const_pointee<Instance>
+ >
+ >
+ , class_type const
+ , class_type
+ >::type
+ const_class_type;
+ typedef typename
+ mpl::if_<
+ mpl::or_<
+ is_volatile<object_type>
+ , mpl::and_<
+ is_directly_convertible
+ , is_volatile<nonref_class_instance>
+ >
+ , mpl::and_<
+ mpl::not_<is_directly_convertible>
+ , volatile_pointee<Instance>
+ >
+ >
+ , const_class_type volatile
+ , const_class_type
+ >::type
+ cv_class_type;
+
+ typedef typename forward_as<cv_class_type, object_type>::type type;
+ };
+
+ template<typename Sig, typename SeqRef>
+ struct get_object_pointer_result_type_seq
+ : get_object_pointer_result_type<
+ typename result_of::front<SeqRef>::type
+ , Sig
+ >
+ {};
+}}}
+
+#endif
Added: sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/pp/invoke_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/pp/invoke_impl.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,178 @@
+/*=============================================================================
+ Copyright (c) 2010 Christopher Schmidt
+
+ 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)
+==============================================================================*/
+
+#include <boost/config.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/size.hpp>
+#include <boost/fusion/sequence/intrinsic/at_c.hpp>
+#ifndef BOOST_FUSION_NO_MEMBER_PTR
+# include <boost/fusion/sequence/intrinsic/front.hpp>
+# include <boost/fusion/functional/invocation/detail/member_object_pointer_helper.hpp>
+# include <boost/fusion/functional/invocation/detail/that_ptr.hpp>
+#endif
+#include <boost/fusion/support/tag_of.hpp>
+#include <boost/fusion/support/category_of.hpp>
+#include <boost/fusion/support/internal/result_of.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/iterate.hpp>
+#include <boost/preprocessor/repetition/repeat_from_to.hpp>
+#include <boost/preprocessor/repetition/enum.hpp>
+#ifndef BOOST_FUSION_RETURN_VOID
+# include <boost/preprocessor/repetition/enum_binary_params.hpp>
+# include <boost/preprocessor/facilities/intercept.hpp>
+#endif
+#ifndef BOOST_FUSION_NO_MEMBER_PTR
+# include <boost/preprocessor/repetition/enum_shifted.hpp>
+#endif
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/type_traits/is_member_pointer.hpp>
+#include <boost/type_traits/is_member_object_pointer.hpp>
+#include <boost/type_traits/is_member_function_pointer.hpp>
+#include <boost/utility/result_of.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+#ifndef BOOST_FUSION_NO_MEMBER_PTR
+ struct member_function_ptr;
+ struct member_object_ptr;
+#endif
+ struct function_object;
+
+ namespace random_access_impl
+ {
+#ifndef BOOST_FUSION_RETURN_VOID
+ template<int SeqSize, typename F, typename SeqRef>
+ struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME);
+#endif
+
+ template<
+ typename f_type
+ , int SeqSize
+ , typename F
+ , typename SeqRef
+ , typename Result
+ >
+ struct BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_impl);
+ }
+
+ namespace forward_impl
+ {
+#ifndef BOOST_FUSION_RETURN_VOID
+ template<int SeqSize, typename F, typename SeqRef>
+ struct BOOST_PP_CAT(result_of_,BOOST_FUSION_INVOKE_NAME);
+#endif
+
+ template<
+ typename f_type
+ , int SeqSize
+ , typename F
+ , typename SeqRef
+ , typename Result
+ >
+ struct BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_impl);
+ }
+
+#define BOOST_PP_FILENAME_1 <boost/fusion/functional/invocation/detail/pp/invoke_impl_n.hpp>
+#define BOOST_PP_ITERATION_LIMITS (0, BOOST_FUSION_INVOKE_IMPL_MAX_ARITY)
+#include BOOST_PP_ITERATE()
+
+ template<typename F, typename SeqRef>
+ struct BOOST_FUSION_INVOKE_NAME
+ {
+#ifdef BOOST_FUSION_RETURN_VOID
+ typedef void type;
+#else
+ typedef
+ mpl::eval_if<
+ traits::is_random_access<SeqRef>
+ , random_access_impl::
+ BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME)<
+ result_of::size<SeqRef>::value
+ , F
+ , SeqRef
+ >
+ , forward_impl::
+ BOOST_PP_CAT(result_of_,BOOST_FUSION_INVOKE_NAME)<
+ result_of::size<SeqRef>::value
+ , F
+ , SeqRef
+ >
+ >
+ impl_type;
+ typedef typename detail::remove_reference<F>::type f;
+ typedef preevaluate<F> preevaluater;
+
+ typedef typename
+ mpl::eval_if<
+ typename preevaluater::is_preevaluable
+ , preevaluater
+# ifndef BOOST_FUSION_NO_MEMBER_PTR
+ , mpl::eval_if<
+ is_member_object_pointer<f>
+ , get_object_pointer_result_type_seq<f, SeqRef>
+# endif
+ , impl_type
+# ifndef BOOST_FUSION_NO_MEMBER_PTR
+ >
+# endif
+ >::type
+ type;
+#endif
+
+ static type
+ call(F f_, SeqRef seq)
+ {
+#ifdef BOOST_FUSION_RETURN_VOID
+ typedef typename detail::remove_reference<F>::type f;
+#endif
+
+ typedef
+#ifdef BOOST_FUSION_NO_MEMBER_PTR
+ function_object
+#else
+ typename mpl::eval_if<
+ is_member_function_pointer<f>
+ , mpl::identity<member_function_ptr>
+ , mpl::if_<
+ is_member_object_pointer<f>
+ , member_object_ptr
+ , function_object
+ >
+ >::type
+#endif
+ f_type;
+
+ return mpl::if_<
+ traits::is_random_access<SeqRef>
+ , random_access_impl::
+ BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_impl)<
+ f_type
+ , result_of::size<SeqRef>::value
+ , F
+ , SeqRef
+ , type
+ >
+ , forward_impl::
+ BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_impl)<
+ f_type
+ , result_of::size<SeqRef>::value
+ , F
+ , SeqRef
+ , type
+ >
+ >::type::call(f_, seq);
+ }
+ };
+}}}
+
Added: sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/pp/invoke_impl_n.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/pp/invoke_impl_n.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,243 @@
+/*=============================================================================
+ Copyright (c) 2010 Christopher Schmidt
+
+ 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)
+==============================================================================*/
+
+#define BOOST_FUSION_N BOOST_PP_ITERATION()
+
+namespace random_access_impl
+{
+#ifndef BOOST_FUSION_RETURN_VOID
+# define BOOST_FUSION_RESULT_OF_AT_SEQ_N(Z,N,_)\
+ typename result_of::at_c<SeqRef,N>::type
+
+ template<typename F, typename SeqRef>
+ struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME)<
+ BOOST_FUSION_N
+ , F
+ , SeqRef>
+ {
+ typedef typename
+ boost::result_of<
+ typename get_func_base<F>::type(BOOST_PP_ENUM_1(
+ BOOST_FUSION_N,BOOST_FUSION_RESULT_OF_AT_SEQ_N,_))
+ >::type
+ type;
+ };
+
+# undef BOOST_FUSION_RESULT_OF_AT_SEQ_N
+#endif
+
+#define BOOST_FUSION_SEQ_AT_N(Z,N,_) fusion::at_c<N>(static_cast<SeqRef>(seq))
+
+ template<typename F, typename SeqRef, typename Result>
+ struct BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_impl)<
+ function_object
+ , BOOST_FUSION_N
+ , F
+ , SeqRef
+ , Result
+ >
+ {
+ static Result
+ call(F f, SeqRef seq)
+ {
+#ifndef BOOST_FUSION_RETURN_VOID
+ return
+#endif
+ f(BOOST_PP_ENUM_1(BOOST_FUSION_N,BOOST_FUSION_SEQ_AT_N,_));
+ }
+ };
+
+#if !defined(BOOST_FUSION_NO_MEMBER_PTR) && BOOST_FUSION_N>=1
+ template<typename F, typename SeqRef, typename Result>
+ struct BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_impl)<
+ member_function_ptr
+ , BOOST_FUSION_N
+ , F
+ , SeqRef
+ , Result
+ >
+ {
+ static Result
+ call(F f, SeqRef seq)
+ {
+# ifndef BOOST_FUSION_RETURN_VOID
+ return
+# endif
+ (that_ptr<typename preevaluate<F>::gen::class_type>::get(
+ fusion::front(seq))->*f)(BOOST_PP_ENUM_SHIFTED_1(
+ BOOST_FUSION_N,BOOST_FUSION_SEQ_AT_N,_));
+ }
+ };
+
+# if BOOST_FUSION_N==1
+ template<typename F, typename SeqRef, typename Result>
+ struct BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_impl)<
+ member_object_ptr
+ , 1
+ , F
+ , SeqRef
+ , Result
+ >
+ {
+ static Result
+ call(F f, SeqRef seq)
+ {
+ typedef typename result_of::front<SeqRef>::type Instance;
+
+ return (that_ptr<
+ typename get_object_pointer_result_type<
+ Instance
+ , typename remove_reference<F>::type
+ >::cv_class_type&
+ >::get(fusion::front(seq))->*f);
+ }
+ };
+# endif
+#endif
+
+#undef BOOST_FUSION_SEQ_AT_N
+}
+
+namespace forward_impl
+{
+#ifndef BOOST_FUSION_RETURN_VOID
+ template<typename F, typename SeqRef>
+ struct BOOST_PP_CAT(result_of_,BOOST_FUSION_INVOKE_NAME)<
+ BOOST_FUSION_N
+ , F
+ , SeqRef>
+ {
+# if BOOST_FUSION_N
+ typedef typename result_of::begin<SeqRef>::type It0;
+
+# if BOOST_FUSION_N > 1
+# define BOOST_FUSION_IT_N(Z,N,_)\
+ typedef typename\
+ result_of::next<BOOST_PP_CAT(It, BOOST_PP_DEC(N))>::type\
+ BOOST_PP_CAT(It,N);\
+
+ BOOST_PP_REPEAT_FROM_TO_1(1, BOOST_FUSION_N, BOOST_FUSION_IT_N, _)
+
+# undef BOOST_FUSION_IT_N
+# endif
+# endif
+
+ typedef typename
+ boost::result_of<
+ typename get_func_base<F>::type(
+ BOOST_PP_ENUM_BINARY_PARAMS_Z(
+ 1,
+ BOOST_FUSION_N,
+ typename result_of::deref<It,
+ >::type BOOST_PP_INTERCEPT)
+ )
+ >::type
+ type;
+ };
+#endif
+
+
+#if BOOST_FUSION_N
+# define BOOST_FUSION_IT_N(Z,N,_)\
+ typedef typename\
+ result_of::next<BOOST_PP_CAT(It, BOOST_PP_DEC(N))>::type\
+ BOOST_PP_CAT(It,N);\
+ BOOST_PP_CAT(It,N) BOOST_PP_CAT(it,N)=\
+ fusion::next(BOOST_PP_CAT(it, BOOST_PP_DEC(N)));
+
+# define BOOST_FUSION_DEFINE_ITS()\
+ typedef typename result_of::begin<SeqRef>::type It0;\
+ It0 it0=fusion::begin(seq);\
+ \
+ BOOST_PP_REPEAT_FROM_TO(1, BOOST_FUSION_N, BOOST_FUSION_IT_N, _)
+
+# define BOOST_FUSION_IT_DEREF_N(Z,N,_)\
+ fusion::deref(BOOST_PP_CAT(it,N))
+#else
+# define BOOST_FUSION_DEFINE_ITS()
+#endif
+
+ template<typename F, typename SeqRef, typename Result>
+ struct BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_impl)<
+ function_object
+ , BOOST_FUSION_N
+ , F
+ , SeqRef
+ , Result
+ >
+ {
+ static Result
+ call(F f, SeqRef seq)
+ {
+ BOOST_FUSION_DEFINE_ITS()
+
+#ifndef BOOST_FUSION_RETURN_VOID
+ return
+#endif
+ f(BOOST_PP_ENUM_1(BOOST_FUSION_N,BOOST_FUSION_IT_DEREF_N,_));
+ }
+ };
+
+#if !defined(BOOST_FUSION_NO_MEMBER_PTR) && BOOST_FUSION_N>=1
+ template<typename F, typename SeqRef, typename Result>
+ struct BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_impl)<
+ member_function_ptr
+ , BOOST_FUSION_N
+ , F
+ , SeqRef
+ , Result
+ >
+ {
+ static Result
+ call(F f, SeqRef seq)
+ {
+ BOOST_FUSION_DEFINE_ITS()
+
+# ifndef BOOST_FUSION_RETURN_VOID
+ return
+# endif
+ (that_ptr<typename preevaluate<F>::gen::class_type>::get(
+ fusion::deref(it0))->*f)(BOOST_PP_ENUM_SHIFTED_1(
+ BOOST_FUSION_N,BOOST_FUSION_IT_DEREF_N,_));
+ }
+ };
+
+# if BOOST_FUSION_N==1
+ template<typename F, typename SeqRef, typename Result>
+ struct BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_impl)<
+ member_object_ptr
+ , 1
+ , F
+ , SeqRef
+ , Result
+ >
+ {
+ static Result
+ call(F f, SeqRef seq)
+ {
+ typedef typename result_of::front<SeqRef>::type Instance;
+
+ return (that_ptr<
+ typename get_object_pointer_result_type<
+ Instance
+ , typename remove_reference<F>::type
+ >::cv_class_type&
+ >::get(fusion::front(seq))->*f);
+ }
+ };
+# endif
+#endif
+
+#if BOOST_FUSION_N
+# undef BOOST_FUSION_IT_DEREF_N
+# undef BOOST_FUSION_IT_N
+#endif
+#undef BOOST_FUSION_DEFINE_ITS
+}
+
+#undef BOOST_FUSION_N
+
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/that_ptr.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/that_ptr.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/that_ptr.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,6 +1,7 @@
/*=============================================================================
Copyright (c) 2006-2007 Tobias Schwinger
-
+ Copyright (c) 2009 Christopher Schmidt
+
Use modification and distribution are subject to 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).
@@ -14,7 +15,6 @@
#include <boost/mpl/bool.hpp>
#include <boost/type_traits/config.hpp>
-#include <boost/type_traits/add_const.hpp>
#include <boost/type_traits/add_volatile.hpp>
#include <boost/get_pointer.hpp>
#include <boost/utility/addressof.hpp>
Added: sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/variadic_templates/invoke_impl.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/detail/variadic_templates/invoke_impl.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,460 @@
+/*=============================================================================
+ Copyright (c) 2009-2010 Christopher Schmidt
+
+ 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)
+==============================================================================*/
+
+#include <boost/config.hpp>
+#include <boost/fusion/sequence/intrinsic/begin.hpp>
+#include <boost/fusion/sequence/intrinsic/size.hpp>
+#include <boost/fusion/sequence/intrinsic/end.hpp>
+#include <boost/fusion/iterator/advance_c.hpp>
+#include <boost/fusion/iterator/prior.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#ifndef BOOST_FUSION_NO_MEMBER_PTR
+# include <boost/fusion/functional/invocation/detail/member_object_pointer_helper.hpp>
+# include <boost/fusion/functional/invocation/detail/that_ptr.hpp>
+#endif
+#include <boost/fusion/support/category_of.hpp>
+#include <boost/fusion/support/internal/result_of.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/utility/result_of.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_member_pointer.hpp>
+#include <boost/type_traits/is_member_object_pointer.hpp>
+#include <boost/type_traits/is_member_function_pointer.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+#ifndef BOOST_FUSION_RETURN_VOID
+ template<typename F, typename... Args>
+ struct BOOST_PP_CAT(
+ BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME),
+ _impl)
+ : boost::result_of<typename get_func_base<F>::type(Args...)>
+ {};
+#endif
+
+#ifdef BOOST_FUSION_NO_MEMBER_PTR
+ template<typename Result, typename F, typename...Args>
+ static Result
+ BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_call_impl)(F&& f,Args&&...args)
+ {
+# ifndef BOOST_FUSION_RETURN_VOID
+ return
+# endif
+ f(BOOST_FUSION_FORWARD(Args,args)...);
+ }
+#else
+ template<typename Result, typename F, typename...Args>
+ static typename disable_if<
+ is_member_pointer<typename remove_reference<F>::type>
+ , Result
+ >::type
+ BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_call_impl)(F&& f,Args&&...args)
+ {
+# ifndef BOOST_FUSION_RETURN_VOID
+ return
+# endif
+ f(std::forward<Args>(args)...);
+ }
+
+ template<typename Result, typename F, typename Instance,typename...Args>
+ static typename enable_if<
+ is_member_function_pointer<typename remove_reference<F>::type>
+ , Result
+ >::type
+ BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_call_impl)(
+ F&& f,
+ Instance&& instance,
+ Args&&... args)
+ {
+# ifndef BOOST_FUSION_RETURN_VOID
+ return
+# endif
+ (that_ptr<typename preevaluate<F>::gen::class_type>::get(
+ instance)->*f)(std::forward<Args>(args)...);
+ }
+
+# ifndef BOOST_FUSION_RETURN_VOID
+ template<typename Result, typename F, typename Instance,typename...Args>
+ static typename enable_if<
+ is_member_object_pointer<typename remove_reference<F>::type>
+ , Result
+ >::type
+ BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_call_impl)(
+ F&& f,
+ Instance&& instance,
+ Args&&... args)
+ {
+ BOOST_FUSION_STATIC_ASSERT(!sizeof...(Args));
+
+ return (that_ptr<
+ typename get_object_pointer_result_type<
+ Instance&&
+ , typename remove_reference<F>::type
+ >::cv_class_type&
+ >::get(instance)->*f);
+ }
+# endif
+#endif
+
+ namespace bidirectional_impl
+ {
+#ifndef BOOST_FUSION_RETURN_VOID
+ template<
+ int NumElementsLeft
+ , typename F
+ , typename It4
+ , typename...Args
+ >
+ struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME)
+ {
+ typedef typename result_of::prior<It4>::type It3;
+ typedef typename result_of::prior<It3>::type It2;
+ typedef typename result_of::prior<It2>::type It1;
+ typedef typename result_of::prior<It1>::type It0;
+
+ typedef typename
+ BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME)<
+ NumElementsLeft-4
+ , F
+ , typename result_of::prior<It0>::type
+ , typename result_of::deref<It0>::type
+ , typename result_of::deref<It1>::type
+ , typename result_of::deref<It2>::type
+ , typename result_of::deref<It3>::type
+ , Args...
+ >::type
+ type;
+ };
+
+ template<typename F, typename It3, typename...Args>
+ struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME)<
+ 3
+ , F
+ , It3
+ , Args...
+ >
+ {
+ typedef typename result_of::prior<It3>::type It2;
+ typedef typename result_of::prior<It2>::type It1;
+
+ typedef typename
+ detail::BOOST_PP_CAT(
+ BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME),
+ _impl)<
+ F
+ , typename result_of::deref<
+ typename result_of::prior<It1>::type
+ >::type
+ , typename result_of::deref<It1>::type
+ , typename result_of::deref<It2>::type
+ , Args...
+ >::type
+ type;
+ };
+
+ template<typename F, typename It2, typename...Args>
+ struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME)<
+ 2
+ , F
+ , It2
+ , Args...
+ >
+ {
+ typedef typename result_of::prior<It2>::type It1;
+
+ typedef typename
+ detail::BOOST_PP_CAT(
+ BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME),
+ _impl)<
+ F
+ , typename result_of::deref<
+ typename result_of::prior<It1>::type
+ >::type
+ , typename result_of::deref<It1>::type
+ , Args...
+ >::type
+ type;
+ };
+
+ template<typename F, typename It1, typename...Args>
+ struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME)<
+ 1
+ , F
+ , It1
+ , Args...
+ >
+ {
+ typedef typename
+ detail::BOOST_PP_CAT(
+ BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME),
+ _impl)<
+ F
+ , typename result_of::deref<
+ typename result_of::prior<It1>::type
+ >::type
+ , Args...
+ >::type
+ type;
+ };
+
+ template<typename F, typename It0, typename...Args>
+ struct BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME)<
+ 0
+ , F
+ , It0
+ , Args...
+ >
+ {
+ typedef typename
+ detail::BOOST_PP_CAT(
+ BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME),
+ _impl)<
+ F
+ , Args...
+ >::type
+ type;
+ };
+#endif
+
+ template<typename F, typename Result>
+ struct BOOST_PP_CAT(unrolled_,BOOST_FUSION_INVOKE_NAME)
+ {
+ template<int NumElementsLeft,typename It4,typename...Args>
+ static Result
+ call(mpl::int_<NumElementsLeft>,
+ F f,
+ It4 const& it4,
+ Args&&... args)
+ {
+ typedef typename result_of::prior<It4 const&>::type It3;
+ It3 it3 = fusion::prior(it4);
+ typedef typename result_of::prior<It3&>::type It2;
+ It2 it2 = fusion::prior(it3);
+ typedef typename result_of::prior<It2&>::type It1;
+ It1 it1 = fusion::prior(it2);
+ typedef typename result_of::prior<It1&>::type It0;
+ It0 it0 = fusion::prior(it1);
+
+ return call(
+ mpl::int_<NumElementsLeft-4>(),
+ f,
+ it0,
+ fusion::deref(it0),
+ fusion::deref(it1),
+ fusion::deref(it2),
+ fusion::deref(it3),
+ std::forward<Args>(args)...);
+ }
+
+ template<typename It3,typename...Args>
+ static Result
+ call(mpl::int_<3>,
+ F f,
+ It3 const& it3,
+ Args&&... args)
+ {
+ typedef typename result_of::prior<It3 const&>::type It2;
+ It2 it2 = fusion::prior(it3);
+ typedef typename result_of::prior<It2&>::type It1;
+ It1 it1 = fusion::prior(it2);
+
+ return BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_call_impl)<
+ Result
+ >(static_cast<F>(f),
+ fusion::deref(fusion::prior(it1)),
+ fusion::deref(it1),
+ fusion::deref(it2),
+ std::forward<Args>(args)...);
+ }
+
+ template<typename It2,typename...Args>
+ static Result
+ call(mpl::int_<2>,
+ F f,
+ It2 const& it2,
+ Args&&... args)
+ {
+ typedef typename result_of::prior<It2 const&>::type It1;
+ It1 it1 = fusion::prior(it2);
+
+ return BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_call_impl)<
+ Result
+ >(static_cast<F>(f),
+ fusion::deref(fusion::prior(it1)),
+ fusion::deref(it1),
+ std::forward<Args>(args)...);
+ }
+
+ template<typename It1,typename...Args>
+ static Result
+ call(mpl::int_<1>,
+ F f,
+ It1 const& it1,
+ Args&&... args)
+ {
+ return BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_call_impl)<
+ Result
+ >(static_cast<F>(f),
+ fusion::deref(fusion::prior(it1)),
+ std::forward<Args>(args)...);
+ }
+
+ template<typename It,typename...Args>
+ static Result
+ call(mpl::int_<0>,
+ F f,
+ It const& it,
+ Args&&... args)
+ {
+ return BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_call_impl)<
+ Result
+ >(static_cast<F>(f),std::forward<Args>(args)...);
+ }
+ };
+ }
+
+ namespace forward_impl
+ {
+#ifndef BOOST_FUSION_RETURN_VOID
+ template<int NumArgsLeft, typename F, typename Begin, typename... Args>
+ struct BOOST_PP_CAT(result_of_,BOOST_FUSION_INVOKE_NAME)
+ : BOOST_PP_CAT(result_of_,BOOST_FUSION_INVOKE_NAME)<
+ NumArgsLeft-1
+ , F
+ , Begin
+ , typename result_of::deref<
+ typename result_of::advance_c<Begin, NumArgsLeft-1>::type
+ >::type
+ , Args...
+ >
+ {};
+
+ template<typename F, typename Begin, typename... Args>
+ struct BOOST_PP_CAT(result_of_,BOOST_FUSION_INVOKE_NAME)<
+ 0
+ , F
+ , Begin
+ , Args...
+ >
+ : BOOST_PP_CAT(
+ BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME),
+ _impl)<
+ F
+ , Args...
+ >
+ {};
+#endif
+
+ template<typename F,typename Result>
+ struct BOOST_FUSION_INVOKE_NAME
+ {
+ template<typename Begin, typename... Args>
+ static Result
+ call(mpl::int_<0>, F f,Begin const&, Args&&... args)
+ {
+ return BOOST_PP_CAT(BOOST_FUSION_INVOKE_NAME,_call_impl)<
+ Result
+ >(std::forward<F>(f),std::forward<Args>(args)...);
+ }
+
+ template<int NumArgsLeft,typename Begin, typename... Args>
+ static Result
+ call(mpl::int_<NumArgsLeft>, F f, Begin const& begin,Args&&... args)
+ {
+ return call(
+ mpl::int_<NumArgsLeft-1>(),
+ f,
+ begin,
+ fusion::deref(fusion::advance_c<NumArgsLeft-1>(begin)),
+ std::forward<Args>(args)...);
+ }
+ };
+ }
+
+ template<typename F, typename SeqRef>
+ struct BOOST_FUSION_INVOKE_NAME
+ {
+#ifdef BOOST_FUSION_RETURN_VOID
+ typedef void type;
+#else
+ typedef
+ mpl::eval_if<
+ traits::is_bidirectional<SeqRef>
+ , bidirectional_impl::
+ BOOST_PP_CAT(result_of_unrolled_,BOOST_FUSION_INVOKE_NAME)<
+ result_of::size<SeqRef>::value
+ , F
+ , typename result_of::end<SeqRef>::type
+ >
+ , forward_impl::
+ BOOST_PP_CAT(result_of_,BOOST_FUSION_INVOKE_NAME)<
+ result_of::size<SeqRef>::value
+ , F
+ , typename result_of::begin<SeqRef>::type
+ >
+ >
+ impl_type;
+ typedef typename detail::remove_reference<F>::type f;
+ typedef preevaluate<F> preevaluater;
+
+ typedef typename
+ mpl::eval_if<
+ typename preevaluater::is_preevaluable
+ , preevaluater
+# ifndef BOOST_FUSION_NO_MEMBER_PTR
+ , mpl::eval_if<
+ is_member_object_pointer<f>
+ , get_object_pointer_result_type_seq<f, SeqRef>
+# endif
+ , impl_type
+# ifndef BOOST_FUSION_NO_MEMBER_PTR
+ >
+# endif
+ >::type
+ type;
+#endif
+
+ static type
+ call_impl(mpl::false_ /*is_bidirectional*/,
+ F f,
+ SeqRef seq)
+ {
+ return forward_impl::BOOST_FUSION_INVOKE_NAME<
+ F
+ , type
+ >::call(mpl::int_<result_of::size<SeqRef>::value>(),
+ f,
+ fusion::begin(static_cast<SeqRef>(seq)));
+ }
+
+ static type
+ call_impl(mpl::true_ /*is_bidirectional*/,
+ F f,
+ SeqRef seq)
+ {
+ return bidirectional_impl::BOOST_PP_CAT(unrolled_,
+ BOOST_FUSION_INVOKE_NAME)<
+ F
+ , type
+ >::call(mpl::int_<result_of::size<SeqRef>::value>(),
+ f,
+ fusion::end(static_cast<SeqRef>(seq)));
+ }
+
+ static type
+ call(F f, SeqRef seq)
+ {
+ return call_impl(
+ traits::is_bidirectional<SeqRef>(),f,seq);
+ }
+ };
+}}}
+
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/invoke.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/invoke.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/invoke.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,5 +1,7 @@
/*=============================================================================
- Copyright (c) 2009 Christopher Schmidt
+ Copyright (c) 2005-2006 Joao Abecasis
+ Copyright (c) 2006-2007 Tobias Schwinger
+ Copyright (c) 2009-2010 Christopher Schmidt
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)
@@ -8,13 +10,12 @@
#ifndef BOOST_FUSION_FUNCTIONAL_INVOCATION_INVOKE_HPP
#define BOOST_FUSION_FUNCTIONAL_INVOCATION_INVOKE_HPP
-#include <boost/config.hpp>
-#if defined(BOOST_NO_DECLTYPE) || defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES) //|| 1
-# include <boost/fusion/functional/invocation/detail/no_0x/invoke.hpp>
-#else
-# define BOOST_FUSION_INVOKE_NAME invoke
-# include <boost/fusion/functional/invocation/detail/0x/invoke_impl.hpp>
-# undef BOOST_FUSION_INVOKE_NAME
-#endif
+#include <boost/fusion/functional/invocation/limits.hpp>
+
+#define BOOST_FUSION_INVOKE_IMPL_MAX_ARITY BOOST_FUSION_INVOKE_MAX_ARITY
+#define BOOST_FUSION_INVOKE_NAME invoke
+#include <boost/fusion/functional/invocation/detail/invoke.hpp>
+#undef BOOST_FUSION_INVOKE_NAME
+#undef BOOST_FUSION_INVOKE_IMPL_MAX_ARITY
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/invoke_function_object.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/invoke_function_object.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/invoke_function_object.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,5 +1,7 @@
/*=============================================================================
- Copyright (c) 2009 Christopher Schmidt
+ Copyright (c) 2005-2006 Joao Abecasis
+ Copyright (c) 2006-2007 Tobias Schwinger
+ Copyright (c) 2009-2010 Christopher Schmidt
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)
@@ -8,13 +10,14 @@
#ifndef BOOST_FUSION_FUNCTIONAL_INVOCATION_INVOKE_FUNCTION_OBJECT_HPP
#define BOOST_FUSION_FUNCTIONAL_INVOCATION_INVOKE_FUNCTION_OBJECT_HPP
-#include <boost/config.hpp>
-#if defined(BOOST_NO_DECLTYPE) || defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES) //|| 1
-# include <boost/fusion/functional/invocation/detail/no_0x/invoke_function_object.hpp>
-#elif !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED)
-# define BOOST_FUSION_INVOKE_NAME invoke_function_object
-# include <boost/fusion/functional/invocation/detail/0x/invoke_impl.hpp>
-# undef BOOST_FUSION_INVOKE_NAME
-#endif
+#include <boost/fusion/functional/invocation/limits.hpp>
+
+#define BOOST_FUSION_INVOKE_IMPL_MAX_ARITY BOOST_FUSION_INVOKE_FUNCTION_OBJECT_MAX_ARITY
+#define BOOST_FUSION_NO_MEMBER_PTR
+#define BOOST_FUSION_INVOKE_NAME invoke_function_object
+#include <boost/fusion/functional/invocation/detail/invoke.hpp>
+#undef BOOST_FUSION_INVOKE_NAME
+#undef BOOST_FUSION_NO_MEMBER_PTR
+#undef BOOST_FUSION_INVOKE_IMPL_MAX_ARITY
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/invoke_procedure.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/invoke_procedure.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/invoke_procedure.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,5 +1,7 @@
/*=============================================================================
- Copyright (c) 2009 Christopher Schmidt
+ Copyright (c) 2005-2006 Joao Abecasis
+ Copyright (c) 2006-2007 Tobias Schwinger
+ Copyright (c) 2009-2010 Christopher Schmidt
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)
@@ -8,13 +10,14 @@
#ifndef BOOST_FUSION_FUNCTIONAL_INVOCATION_INVOKE_PROCEDURE_HPP
#define BOOST_FUSION_FUNCTIONAL_INVOCATION_INVOKE_PROCEDURE_HPP
-#include <boost/config.hpp>
-#if defined(BOOST_NO_DECLTYPE) || defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES) //|| 1
-# include <boost/fusion/functional/invocation/detail/no_0x/invoke_procedure.hpp>
-#elif !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED)
-# define BOOST_FUSION_INVOKE_NAME invoke_procedure
-# include <boost/fusion/functional/invocation/detail/0x/invoke_impl.hpp>
-# undef BOOST_FUSION_INVOKE_NAME
-#endif
+#include <boost/fusion/functional/invocation/limits.hpp>
+
+#define BOOST_FUSION_INVOKE_IMPL_MAX_ARITY BOOST_FUSION_INVOKE_PROCEDURE_MAX_ARITY
+#define BOOST_FUSION_RETURN_VOID
+#define BOOST_FUSION_INVOKE_NAME invoke_procedure
+#include <boost/fusion/functional/invocation/detail/invoke.hpp>
+#undef BOOST_FUSION_INVOKE_NAME
+#undef BOOST_FUSION_RETURN_VOID
+#undef BOOST_FUSION_INVOKE_IMPL_MAX_ARITY
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/limits.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/limits.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/functional/invocation/limits.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,5 +1,6 @@
/*=============================================================================
Copyright (c) 2006-2007 Tobias Schwinger
+ Copyright (c) 2009-2010 Christopher Schmidt
Use modification and distribution are subject to the Boost Software
License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@@ -11,7 +12,7 @@
#include <boost/config.hpp>
-#if defined(BOOST_NO_DECLTYPE) || defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES) || !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED) //|| 1
+#if defined(BOOST_NO_VARIADIC_TEMPLATES) || defined(BOOST_NO_RVALUE_REFERENCES) || !defined(BOOST_FUSION_CPP0X_NO_DEPRECEATED)
# ifndef BOOST_FUSION_INVOKE_MAX_ARITY
# define BOOST_FUSION_INVOKE_MAX_ARITY 6
# endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/convenience/copy.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/convenience/copy.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/convenience/copy.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -15,6 +15,8 @@
#include <boost/fusion/support/internal/ref.hpp>
#include <boost/fusion/support/internal/assert.hpp>
+//TODO assoc_copy, assoc_move, assoc_swap
+
namespace boost { namespace fusion
{
namespace detail
Modified: sandbox/SOC/2009/fusion/boost/fusion/sequence/sequence_facade.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/sequence/sequence_facade.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/sequence/sequence_facade.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -45,7 +45,6 @@
struct sequence_facade
: sequence_base<Derived>
{
- //TODO!!!
typedef fusion_sequence_tag tag;
typedef sequence_facade_tag fusion_tag;
typedef Derived derived_type;
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/internal/result_of.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/internal/result_of.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/internal/result_of.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -1,5 +1,5 @@
/*=============================================================================
- Copyright (c) 2009 Christopher Schmidt
+ Copyright (c) 2009-2010 Christopher Schmidt
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)
@@ -10,24 +10,26 @@
#include <boost/config.hpp>
#include <boost/fusion/support/internal/ref.hpp>
-
-#if defined(BOOST_NO_DECLTYPE) || !defined(BOOST_NO_VARIADIC_TEMPLATES)
-# include <boost/mpl/bool.hpp>
-#endif
-#ifdef BOOST_NO_DECLTYPE
-# include <boost/mpl/has_xxx.hpp>
-# include <boost/mpl/eval_if.hpp>
-# include <boost/mpl/identity.hpp>
-#endif
-#ifndef BOOST_NO_VARIADIC_TEMPLATES
-# include <boost/mpl/identity.hpp>
-#endif
+#include <boost/mpl/has_xxx.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
#include <boost/mpl/if.hpp>
#include <boost/mpl/or.hpp>
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+# include <boost/mpl/at.hpp>
+# include <boost/mpl/front.hpp>
+#endif
#include <boost/type_traits/is_pointer.hpp>
#include <boost/type_traits/remove_pointer.hpp>
#include <boost/type_traits/is_function.hpp>
#include <boost/type_traits/is_member_function_pointer.hpp>
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+# include <boost/function_types/components.hpp>
+# include <boost/function_types/result_type.hpp>
+# include <boost/function_types/is_function.hpp>
+# include <boost/function_types/is_member_function_pointer.hpp>
+# include <boost/utility/enable_if.hpp>
+#endif
#include <boost/utility/result_of.hpp>
namespace boost { namespace fusion { namespace detail
@@ -77,7 +79,12 @@
typedef typename F::result_type type;
};
- template<typename F>
+ template<
+ typename F
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+ , typename Enable=void
+#endif
+ >
struct preevaluate_impl
{
typedef typename has_result_type<F>::type is_preevaluable;
@@ -90,7 +97,12 @@
type;
};
#else
- template<typename F>
+ template<
+ typename F
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+ , typename Enable=void
+#endif
+ >
struct preevaluate_impl
{
typedef mpl::false_ is_preevaluable;
@@ -98,8 +110,31 @@
};
#endif
- //cschmidt: a pp implementation won't be worth the effort
-#ifndef BOOST_NO_VARIADIC_TEMPLATES
+ //TODO Tests!
+#ifdef BOOST_NO_VARIADIC_TEMPLATES
+ template<typename F>
+ struct preevaluate_impl<
+ F
+ , typename enable_if<function_types::is_function<F> >::type
+ >
+ {
+ typedef mpl::true_ is_preevaluable;
+ typedef typename function_types::result_type<F>::type type;
+ };
+
+ template<typename F>
+ struct preevaluate_impl<
+ F
+ , typename enable_if<function_types::is_member_function_pointer<F> >::type
+ >
+ {
+ typedef typename function_types::components<F>::type components;
+
+ typedef mpl::true_ is_preevaluable;
+ typedef typename mpl::front<components>::type type;
+ typedef typename mpl::at_c<components,1>::type class_type;
+ };
+#else
template<typename Result,typename... Args>
struct preevaluate_impl<Result (Args...)>
{
@@ -147,9 +182,6 @@
template<typename F>
struct preevaluate
{
-#if defined(BOOST_NO_VARIADIC_TEMPLATES) && !defined(BOOST_NO_DECLTYPE)
- typedef mpl::false_ is_preevaluable;
-#else
typedef
preevaluate_impl<
typename remove_pointer<typename identity<F>::type>::type
@@ -157,7 +189,6 @@
gen;
typedef typename gen::type type;
typedef typename gen::is_preevaluable is_preevaluable;
-#endif
};
//cschmidt: boost::result_of does not like ref-qualified
Modified: sandbox/SOC/2009/fusion/boost/fusion/support/internal/template.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/support/internal/template.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/support/internal/template.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -30,7 +30,7 @@
# define DUMMY1(_)
# define DUMMY2(_,__)
- //cschmidt: for claritys sake no linebreaks
+ //cschmidt: for claritys sake no linebreaks and no BOOST_FUSION_-prefix . TODO!!!
# define VARIADIC_TEMPLATE(N) template<BOOST_PP_ENUM_PARAMS(N, typename T)>
# define VARIADIC_TEMPLATE_WITH_DEFAULT(N) template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(N, typename T, void_)>
# define EXPAND_TEMPLATE_ARGUMENTS(N) BOOST_PP_ENUM_PARAMS(N, T)
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/detail/view_storage.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/detail/view_storage.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/detail/view_storage.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -16,8 +16,6 @@
#include <boost/type_traits/add_const.hpp>
#include <boost/type_traits/remove_const.hpp>
-//TODO is_convertible assert
-
namespace boost { namespace fusion { namespace detail
{
template<typename T>
Deleted: sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/pp/as_nview.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/pp/as_nview.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
+++ (empty file)
@@ -1,105 +0,0 @@
-/*=============================================================================
- Copyright (c) 2009 Hartmut Kaiser
- Copyright (c) 2009 Christopher Schmidt
-
- 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)
-==============================================================================*/
-
-#define BOOST_FUSION_N BOOST_PP_ITERATION()
-
- namespace result_of
- {
- template<
- typename Seq
-#if BOOST_FUSION_N
- , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, int I)
-#endif
- >
- struct as_nview
-#if BOOST_FUSION_N!=FUSION_MAX_VECTOR_SIZE
- <
- Seq
-# if BOOST_FUSION_N
- , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
-# endif
- >
-#endif
- {
- BOOST_FUSION_MPL_ASSERT((traits::is_sequence<Seq>));
- BOOST_FUSION_MPL_ASSERT((traits::is_random_access<Seq>));
-
- typedef
- nview<
- Seq
- , mpl::BOOST_PP_CAT(BOOST_PP_CAT(vector,BOOST_FUSION_N),_c)<
- int
-#if BOOST_FUSION_N
- , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
-#endif
- >
- >
- type;
- };
- }
-
- template<
-#if BOOST_FUSION_N
- BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, int I),
-#endif
- typename Seq
- >
- typename result_of::as_nview<
- BOOST_FUSION_R_ELSE_CLREF(Seq)
-#if BOOST_FUSION_N
- , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
-#endif
- >::type
- as_nview(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
- {
- return typename result_of::as_nview<
- BOOST_FUSION_R_ELSE_CLREF(Seq)
-#if BOOST_FUSION_N
- , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
-#endif
- >::type(BOOST_FUSION_FORWARD(Seq,seq));
- }
-
-#ifdef BOOST_NO_RVALUE_REFERENCES
- template<
-# if BOOST_FUSION_N
- BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, int I),
-# endif
- typename Seq
- >
-//cschmidt: see https://svn.boost.org/trac/boost/ticket/3305
-# if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
- typename lazy_disable_if<
- is_const<Seq>
- , result_of::as_nview<
- Seq&
-# if BOOST_FUSION_N
- , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
-# endif
- >
- >::type
-# else
- typename result_of::as_nview<
- Seq&
-# if BOOST_FUSION_N
- , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
-# endif
- >::type
-# endif
- as_nview(Seq& seq)
- {
- return typename result_of::as_nview<
- Seq&
-# if BOOST_FUSION_N
- , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
-# endif
- >::type(seq);
- }
-#endif
-
-#undef BOOST_FUSION_N
Added: sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/pp/as_nview_n.hpp
==============================================================================
--- (empty file)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/nview/detail/pp/as_nview_n.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -0,0 +1,105 @@
+/*=============================================================================
+ Copyright (c) 2009 Hartmut Kaiser
+ Copyright (c) 2009 Christopher Schmidt
+
+ 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)
+==============================================================================*/
+
+#define BOOST_FUSION_N BOOST_PP_ITERATION()
+
+ namespace result_of
+ {
+ template<
+ typename Seq
+#if BOOST_FUSION_N
+ , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, int I)
+#endif
+ >
+ struct as_nview
+#if BOOST_FUSION_N!=FUSION_MAX_VECTOR_SIZE
+ <
+ Seq
+# if BOOST_FUSION_N
+ , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
+# endif
+ >
+#endif
+ {
+ BOOST_FUSION_MPL_ASSERT((traits::is_sequence<Seq>));
+ BOOST_FUSION_MPL_ASSERT((traits::is_random_access<Seq>));
+
+ typedef
+ nview<
+ Seq
+ , mpl::BOOST_PP_CAT(BOOST_PP_CAT(vector,BOOST_FUSION_N),_c)<
+ int
+#if BOOST_FUSION_N
+ , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
+#endif
+ >
+ >
+ type;
+ };
+ }
+
+ template<
+#if BOOST_FUSION_N
+ BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, int I),
+#endif
+ typename Seq
+ >
+ typename result_of::as_nview<
+ BOOST_FUSION_R_ELSE_CLREF(Seq)
+#if BOOST_FUSION_N
+ , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
+#endif
+ >::type
+ as_nview(BOOST_FUSION_R_ELSE_CLREF(Seq) seq)
+ {
+ return typename result_of::as_nview<
+ BOOST_FUSION_R_ELSE_CLREF(Seq)
+#if BOOST_FUSION_N
+ , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
+#endif
+ >::type(BOOST_FUSION_FORWARD(Seq,seq));
+ }
+
+#ifdef BOOST_NO_RVALUE_REFERENCES
+ template<
+# if BOOST_FUSION_N
+ BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, int I),
+# endif
+ typename Seq
+ >
+//cschmidt: see https://svn.boost.org/trac/boost/ticket/3305
+# if defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS) || BOOST_WORKAROUND(__GNUC__,<4)
+ typename lazy_disable_if<
+ is_const<Seq>
+ , result_of::as_nview<
+ Seq&
+# if BOOST_FUSION_N
+ , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
+# endif
+ >
+ >::type
+# else
+ typename result_of::as_nview<
+ Seq&
+# if BOOST_FUSION_N
+ , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
+# endif
+ >::type
+# endif
+ as_nview(Seq& seq)
+ {
+ return typename result_of::as_nview<
+ Seq&
+# if BOOST_FUSION_N
+ , BOOST_PP_ENUM_PARAMS(BOOST_FUSION_N, I)
+# endif
+ >::type(seq);
+ }
+#endif
+
+#undef BOOST_FUSION_N
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/nview/nview.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/nview/nview.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/nview/nview.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -162,9 +162,9 @@
}
# define BOOST_PP_FILENAME_1\
- <boost/fusion/view/nview/detail/pp/as_nview.hpp>
+ <boost/fusion/view/nview/detail/pp/as_nview_n.hpp>
# define BOOST_PP_ITERATION_LIMITS (0, FUSION_MAX_VECTOR_SIZE)
- #include BOOST_PP_ITERATE()
+# include BOOST_PP_ITERATE()
#endif
}}
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/reverse_view.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/reverse_view.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/reverse_view/reverse_view.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -61,8 +61,7 @@
#define BOOST_FUSION_REVERSE_VIEW_CTOR(MODIFIER,_)\
template<typename OtherSeq>\
reverse_view(reverse_view<OtherSeq> MODIFIER view)\
- : seq(BOOST_FUSION_FORWARD(\
- reverse_view<OtherSeq> MODIFIER,view).seq)\
+ : seq(static_cast<reverse_view<OtherSeq> MODIFIER>(view).seq)\
{}
BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_REVERSE_VIEW_CTOR,_)
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/single_view/single_view.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/single_view/single_view.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/single_view/single_view.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -190,8 +190,6 @@
return typename result_of::make_single_view<T&>::type(val);
}
#endif
-
- //TODO random access
}}
#endif
Modified: sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/zip_view.hpp
==============================================================================
--- sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/zip_view.hpp (original)
+++ sandbox/SOC/2009/fusion/boost/fusion/view/zip_view/zip_view.hpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -167,8 +167,8 @@
#define BOOST_FUSION_ZIP_VIEW_CTOR(MODIFIER,_)\
template<typename OtherSeqs>\
zip_view(zip_view<OtherSeqs> MODIFIER view)\
- : seqs(fusion::sequence_assign(BOOST_FUSION_FORWARD(\
- zip_view<OtherSeqs> MODIFIER,view).seqs))\
+ : seqs(fusion::sequence_assign(\
+ static_cast<zip_view<OtherSeqs> MODIFIER>(view).seqs))\
{}
BOOST_FUSION_ALL_CTOR_COMBINATIONS(BOOST_FUSION_ZIP_VIEW_CTOR,_)
Modified: sandbox/SOC/2009/fusion/libs/fusion/test/algorithm/remove_if.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/algorithm/remove_if.cpp (original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/algorithm/remove_if.cpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -67,9 +67,9 @@
{
typedef vector<Y, char, long, X, bool> mpl_vec;
- BOOST_TEST((remove_if<not_<is_class<_> > >(mpl_vec())
+ BOOST_TEST((fusion::remove_if<not_<is_class<_> > >(mpl_vec())
== vector<Y, X>()));
- BOOST_TEST((remove_if<is_class<_> >(mpl_vec())
+ BOOST_TEST((fusion::remove_if<is_class<_> >(mpl_vec())
== vector<char, long, bool>()));
}
Modified: sandbox/SOC/2009/fusion/libs/fusion/test/functional/invoke.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/functional/invoke.cpp (original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/functional/invoke.cpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -228,7 +228,7 @@
// Pointer to data member
- //TODO!!!
+ //TODO
//BOOST_TEST(that.data == (fusion::invoke(& members::data, fusion::join(sv_obj_ctx,seq)) = that.data));
BOOST_TEST(that.data == (fusion::invoke(& members::data, fusion::join(sv_ref_ctx,seq)) = that.data));
BOOST_TEST(that.data == (fusion::invoke(& members::data, fusion::join(sv_ptr_ctx,seq)) = that.data));
@@ -238,7 +238,7 @@
BOOST_TEST(that.data == fusion::invoke(& members::data, fusion::join(sv_ptr_c_ctx,seq)));
BOOST_TEST(that.data == fusion::invoke(& members::data, fusion::join(sv_spt_c_ctx,seq)));
- //TODO!!!
+ //TODO
//BOOST_TEST(that.data == (fusion::invoke(& members::data, fusion::join(sv_obj_d_ctx,seq)) = that.data));
BOOST_TEST(that.data == (fusion::invoke(& members::data, fusion::join(sv_ref_d_ctx,seq)) = that.data));
BOOST_TEST(that.data == (fusion::invoke(& members::data, fusion::join(sv_ptr_d_ctx,seq)) = that.data));
Modified: sandbox/SOC/2009/fusion/libs/fusion/test/functional/unfused.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/functional/unfused.cpp (original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/functional/unfused.cpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -70,7 +70,8 @@
using boost::is_same;
typedef fusion::unfused< test_func<> > t;
- BOOST_TEST(( is_same< boost::result_of< t () >::type, long >::value ));
+ //TODO
+ BOOST_TEST(( is_same< t::result<t ()>::type, long >::value ));
BOOST_TEST(( is_same< boost::result_of< t (int) >::type, long >::value ));
}
Modified: sandbox/SOC/2009/fusion/libs/fusion/test/functional/unfused_typed.cpp
==============================================================================
--- sandbox/SOC/2009/fusion/libs/fusion/test/functional/unfused_typed.cpp (original)
+++ sandbox/SOC/2009/fusion/libs/fusion/test/functional/unfused_typed.cpp 2010-03-05 18:59:27 EST (Fri, 05 Mar 2010)
@@ -82,7 +82,8 @@
using boost::is_same;
typedef fusion::unfused_typed< test_func<>, types0 > t0;
- BOOST_TEST(( is_same< boost::result_of< t0 () >::type, long >::value ));
+ //TODO
+ BOOST_TEST(( is_same< t0::result<t0 () >::type, long >::value ));
typedef fusion::unfused_typed< test_func<>, types1 > t1;
BOOST_TEST(( is_same< boost::result_of< t1 (int) >::type, long >::value ));
}
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk