Cleanup deque to clearly separate the C++03 code from c++11 code

[SVN r82698]
This commit is contained in:
Joel de Guzman
2013-02-03 10:31:46 +00:00
parent a1a6e42590
commit fec1da027c
42 changed files with 53 additions and 169 deletions

View File

@ -11,92 +11,20 @@
#include <boost/fusion/container/deque/detail/convert_impl.hpp>
#include <boost/fusion/container/deque/deque.hpp>
#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
#include <boost/fusion/iterator/equal_to.hpp>
#include <boost/fusion/iterator/next.hpp>
#include <boost/fusion/iterator/value_of.hpp>
#include <boost/fusion/iterator/deref.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
#include <boost/fusion/container/deque/front_extended_deque.hpp>
#if !defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
///////////////////////////////////////////////////////////////////////////////
// C++03 (non-variadic) implementation
///////////////////////////////////////////////////////////////////////////////
#include <boost/fusion/container/deque/detail/cpp03/build_deque.hpp>
#else
///////////////////////////////////////////////////////////////////////////////
// C++11 variadic implementation
///////////////////////////////////////////////////////////////////////////////
#include <boost/fusion/container/deque/detail/build_deque.hpp>
namespace boost { namespace fusion
{
namespace detail
{
template <typename First, typename Last
, bool is_empty = result_of::equal_to<First, Last>::value>
struct build_deque;
template <typename First, typename Last>
struct build_deque<First, Last, true>
{
typedef deque<> type;
static type
call(First const&, Last const&)
{
return type();
}
};
template <typename T, typename Rest>
struct push_front_deque;
template <typename T>
struct push_front_deque<T, deque<>>
{
typedef deque<T> type;
static type
call(T const& first, deque<>)
{
return type(first);
}
};
template <typename T, typename ...Rest>
struct push_front_deque<T, deque<Rest...>>
{
typedef deque<T, Rest...> type;
static type
call(T const& first, deque<Rest...> const& rest)
{
typedef
front_extended_deque<deque<Rest...>, T>
front_extended;
return type(front_extended(rest, first));
}
};
template <typename First, typename Last>
struct build_deque<First, Last, false>
{
typedef
build_deque<typename result_of::next<First>::type, Last>
next_build_deque;
typedef push_front_deque<
typename result_of::value_of<First>::type
, typename next_build_deque::type>
push_front;
typedef typename push_front::type type;
static type
call(First const& f, Last const& l)
{
typename result_of::value_of<First>::type v = *f;
return push_front::call(
v, next_build_deque::call(fusion::next(f), l));
}
};
}
namespace result_of
{
template <typename Sequence>
@ -126,49 +54,5 @@ namespace boost { namespace fusion
}
}}
#else
///////////////////////////////////////////////////////////////////////////////
// C++03 (non-variadic) implementation
///////////////////////////////////////////////////////////////////////////////
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/size.hpp>
#include <boost/fusion/container/deque/detail/pp_as_deque.hpp>
#include <boost/fusion/container/deque/front_extended_deque.hpp>
namespace boost { namespace fusion
{
namespace result_of
{
template <typename Sequence>
struct as_deque
{
typedef typename
detail::as_deque<result_of::size<Sequence>::value>
gen;
typedef typename gen::
template apply<typename result_of::begin<Sequence>::type>::type
type;
};
}
template <typename Sequence>
inline typename result_of::as_deque<Sequence>::type
as_deque(Sequence& seq)
{
typedef typename result_of::as_deque<Sequence>::gen gen;
return gen::call(fusion::begin(seq));
}
template <typename Sequence>
inline typename result_of::as_deque<Sequence const>::type
as_deque(Sequence const& seq)
{
typedef typename result_of::as_deque<Sequence const>::gen gen;
return gen::call(fusion::begin(seq));
}
}}
#endif
#endif

View File

@ -14,7 +14,7 @@
// With variadics, we will use the PP version
///////////////////////////////////////////////////////////////////////////////
#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
# include <boost/fusion/container/deque/detail/pp_deque.hpp>
# include <boost/fusion/container/deque/detail/cpp03/deque.hpp>
#else
# if !defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
# define BOOST_FUSION_HAS_VARIADIC_DEQUE
@ -27,7 +27,7 @@
#include <boost/fusion/support/detail/access.hpp>
#include <boost/fusion/support/is_sequence.hpp>
#include <boost/fusion/container/deque/detail/keyed_element.hpp>
#include <boost/fusion/container/deque/detail/variadic_deque_keyed_values.hpp>
#include <boost/fusion/container/deque/detail/deque_keyed_values.hpp>
#include <boost/fusion/container/deque/deque_fwd.hpp>
#include <boost/fusion/container/deque/detail/value_at_impl.hpp>
#include <boost/fusion/container/deque/detail/at_impl.hpp>

View File

@ -16,7 +16,7 @@
#if (defined(BOOST_NO_CXX11_DECLTYPE) \
|| defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) \
|| defined(BOOST_NO_CXX11_RVALUE_REFERENCES))
# include <boost/fusion/container/deque/detail/pp_deque_fwd.hpp>
# include <boost/fusion/container/deque/detail/cpp03/deque_fwd.hpp>
#else
# if !defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
# define BOOST_FUSION_HAS_VARIADIC_DEQUE

View File

@ -45,7 +45,7 @@ namespace boost { namespace fusion { namespace detail
}}}
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
#include <boost/fusion/container/deque/detail/preprocessed/as_deque.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque.hpp>
#else
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 2, line: 0, output: "preprocessed/as_deque" FUSION_MAX_DEQUE_SIZE_STR ".hpp")
@ -78,7 +78,7 @@ namespace boost { namespace fusion { namespace detail
typedef typename fusion::result_of::value_of<BOOST_PP_CAT(I, n)>::type \
BOOST_PP_CAT(T, n);
#define BOOST_PP_FILENAME_1 <boost/fusion/container/deque/detail/pp_as_deque.hpp>
#define BOOST_PP_FILENAME_1 <boost/fusion/container/deque/detail/cpp03/as_deque.hpp>
#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_DEQUE_SIZE)
#include BOOST_PP_ITERATE()

View File

@ -12,11 +12,11 @@
#error "C++03 only! This file should not have been included"
#endif
#include <boost/fusion/container/deque/limits.hpp>
#include <boost/fusion/container/deque/detail/cpp03/limits.hpp>
#include <boost/fusion/container/deque/front_extended_deque.hpp>
#include <boost/fusion/container/deque/back_extended_deque.hpp>
#include <boost/fusion/container/deque/detail/pp_deque_keyed_values.hpp>
#include <boost/fusion/container/deque/detail/deque_initial_size.hpp>
#include <boost/fusion/container/deque/detail/cpp03/deque_keyed_values.hpp>
#include <boost/fusion/container/deque/detail/cpp03/deque_initial_size.hpp>
#include <boost/fusion/support/sequence_base.hpp>
#include <boost/fusion/container/deque/detail/keyed_element.hpp>
#include <boost/preprocessor/repetition/enum_params.hpp>
@ -40,10 +40,10 @@
#include <boost/utility/enable_if.hpp>
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
#include <boost/fusion/container/deque/detail/preprocessed/deque.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque.hpp>
#else
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/deque" FUSION_MAX_DEQUE_SIZE_STR ".hpp")
#pragma wave option(preserve: 2, line: 0, output: "preprocessed/deque" FUSION_MAX_DEQUE_SIZE_STR ".hpp")
#endif
/*=============================================================================
@ -78,7 +78,7 @@ namespace boost { namespace fusion {
mpl::if_<mpl::equal_to<size, mpl::int_<0> >, mpl::int_<0>, mpl::int_<-1> >::type::value> next_down;
typedef mpl::false_ is_view;
#include <boost/fusion/container/deque/detail/deque_forward_ctor.hpp>
#include <boost/fusion/container/deque/detail/cpp03/deque_forward_ctor.hpp>
deque()
{}

View File

@ -20,7 +20,7 @@
#include <boost/preprocessor/repetition/enum_binary_params.hpp>
#define BOOST_PP_FILENAME_1 \
<boost/fusion/container/deque/detail/deque_forward_ctor.hpp>
<boost/fusion/container/deque/detail/cpp03/deque_forward_ctor.hpp>
#define BOOST_PP_ITERATION_LIMITS (2, FUSION_MAX_DEQUE_SIZE)
#include BOOST_PP_ITERATE()

View File

@ -12,14 +12,14 @@
#error "C++03 only! This file should not have been included"
#endif
#include <boost/fusion/container/deque/limits.hpp>
#include <boost/fusion/container/deque/detail/cpp03/limits.hpp>
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
#include <boost/fusion/container/deque/detail/preprocessed/deque_fwd.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_fwd.hpp>
#else
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/deque" FUSION_MAX_DEQUE_SIZE_STR "_fwd.hpp")
#pragma wave option(preserve: 2, line: 0, output: "preprocessed/deque" FUSION_MAX_DEQUE_SIZE_STR "_fwd.hpp")
#endif
/*=============================================================================

View File

@ -25,7 +25,7 @@ namespace boost { namespace fusion
}}
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
#include <boost/fusion/container/deque/detail/preprocessed/deque_initial_size.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size.hpp>
#else
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 2, line: 0, output: "preprocessed/deque_initial_size" FUSION_MAX_DEQUE_SIZE_STR ".hpp")

View File

@ -12,7 +12,7 @@
#error "C++03 only! This file should not have been included"
#endif
#include <boost/fusion/container/deque/limits.hpp>
#include <boost/fusion/container/deque/detail/cpp03/limits.hpp>
#include <boost/fusion/container/deque/detail/keyed_element.hpp>
#include <boost/preprocessor/iterate.hpp>
@ -34,7 +34,7 @@ namespace boost { namespace fusion
}}
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
#include <boost/fusion/container/deque/detail/preprocessed/deque_keyed_values.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values.hpp>
#else
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 2, line: 0, output: "preprocessed/deque_keyed_values" FUSION_MAX_DEQUE_SIZE_STR ".hpp")
@ -89,7 +89,7 @@ namespace boost { namespace fusion { namespace detail
BOOST_PP_ENUM_SHIFTED_PARAMS(FUSION_MAX_DEQUE_SIZE, T)>::type tail;
typedef keyed_element<N, T0, tail> type;
#include <boost/fusion/container/deque/detail/deque_keyed_values_call.hpp>
#include <boost/fusion/container/deque/detail/cpp03/deque_keyed_values_call.hpp>
};

View File

@ -22,7 +22,7 @@
std::forward<BOOST_PP_CAT(T_, n)>(BOOST_PP_CAT(t, n))
#define BOOST_PP_FILENAME_1 \
<boost/fusion/container/deque/detail/deque_keyed_values_call.hpp>
<boost/fusion/container/deque/detail/cpp03/deque_keyed_values_call.hpp>
#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_DEQUE_SIZE)
#include BOOST_PP_ITERATE()

View File

@ -8,15 +8,15 @@
==============================================================================*/
#if FUSION_MAX_DEQUE_SIZE <= 10
#include <boost/fusion/container/deque/detail/preprocessed/as_deque10.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque10.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 20
#include <boost/fusion/container/deque/detail/preprocessed/as_deque20.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque20.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 30
#include <boost/fusion/container/deque/detail/preprocessed/as_deque30.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque30.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 40
#include <boost/fusion/container/deque/detail/preprocessed/as_deque40.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque40.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 50
#include <boost/fusion/container/deque/detail/preprocessed/as_deque50.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque50.hpp>
#else
#error "FUSION_MAX_DEQUE_SIZE out of bounds for preprocessed headers"
#endif

View File

@ -8,15 +8,15 @@
==============================================================================*/
#if FUSION_MAX_DEQUE_SIZE <= 10
#include <boost/fusion/container/deque/detail/preprocessed/deque10.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque10.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 20
#include <boost/fusion/container/deque/detail/preprocessed/deque20.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque20.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 30
#include <boost/fusion/container/deque/detail/preprocessed/deque30.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque30.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 40
#include <boost/fusion/container/deque/detail/preprocessed/deque40.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque40.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 50
#include <boost/fusion/container/deque/detail/preprocessed/deque50.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque50.hpp>
#else
#error "FUSION_MAX_DEQUE_SIZE out of bounds for preprocessed headers"
#endif

View File

@ -8,15 +8,15 @@
==============================================================================*/
#if FUSION_MAX_DEQUE_SIZE <= 10
#include <boost/fusion/container/deque/detail/preprocessed/deque10_fwd.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque10_fwd.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 20
#include <boost/fusion/container/deque/detail/preprocessed/deque20_fwd.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque20_fwd.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 30
#include <boost/fusion/container/deque/detail/preprocessed/deque30_fwd.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque30_fwd.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 40
#include <boost/fusion/container/deque/detail/preprocessed/deque40_fwd.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque40_fwd.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 50
#include <boost/fusion/container/deque/detail/preprocessed/deque50_fwd.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque50_fwd.hpp>
#else
#error "FUSION_MAX_DEQUE_SIZE out of bounds for preprocessed headers"
#endif

View File

@ -8,15 +8,15 @@
==============================================================================*/
#if FUSION_MAX_DEQUE_SIZE <= 10
#include <boost/fusion/container/deque/detail/preprocessed/deque_initial_size10.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size10.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 20
#include <boost/fusion/container/deque/detail/preprocessed/deque_initial_size20.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size20.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 30
#include <boost/fusion/container/deque/detail/preprocessed/deque_initial_size30.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size30.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 40
#include <boost/fusion/container/deque/detail/preprocessed/deque_initial_size40.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size40.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 50
#include <boost/fusion/container/deque/detail/preprocessed/deque_initial_size50.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size50.hpp>
#else
#error "FUSION_MAX_DEQUE_SIZE out of bounds for preprocessed headers"
#endif

View File

@ -8,15 +8,15 @@
==============================================================================*/
#if FUSION_MAX_DEQUE_SIZE <= 10
#include <boost/fusion/container/deque/detail/preprocessed/deque_keyed_values10.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values10.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 20
#include <boost/fusion/container/deque/detail/preprocessed/deque_keyed_values20.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values20.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 30
#include <boost/fusion/container/deque/detail/preprocessed/deque_keyed_values30.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values30.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 40
#include <boost/fusion/container/deque/detail/preprocessed/deque_keyed_values40.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values40.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 50
#include <boost/fusion/container/deque/detail/preprocessed/deque_keyed_values50.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values50.hpp>
#else
#error "FUSION_MAX_DEQUE_SIZE out of bounds for preprocessed headers"
#endif