forked from boostorg/fusion
Patches from Nathan Ridge using SFINAE to disable the Fusion algorithms for non-{Fusion sequence} types
[SVN r78463]
This commit is contained in:
@ -11,8 +11,11 @@
|
|||||||
#include <boost/fusion/sequence/intrinsic/end.hpp>
|
#include <boost/fusion/sequence/intrinsic/end.hpp>
|
||||||
#include <boost/fusion/sequence/intrinsic/size.hpp>
|
#include <boost/fusion/sequence/intrinsic/size.hpp>
|
||||||
#include <boost/fusion/sequence/comparison/detail/equal_to.hpp>
|
#include <boost/fusion/sequence/comparison/detail/equal_to.hpp>
|
||||||
|
#include <boost/fusion/support/is_sequence.hpp>
|
||||||
#include <boost/config.hpp>
|
#include <boost/config.hpp>
|
||||||
#include <boost/static_assert.hpp>
|
#include <boost/static_assert.hpp>
|
||||||
|
#include <boost/utility/enable_if.hpp>
|
||||||
|
#include <boost/type_traits/ice.hpp>
|
||||||
|
|
||||||
#if defined (BOOST_MSVC)
|
#if defined (BOOST_MSVC)
|
||||||
# pragma warning(push)
|
# pragma warning(push)
|
||||||
@ -54,7 +57,15 @@ namespace boost { namespace fusion
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename Seq1, typename Seq2>
|
template <typename Seq1, typename Seq2>
|
||||||
inline void
|
inline
|
||||||
|
typename
|
||||||
|
enable_if_c<
|
||||||
|
type_traits::ice_and<
|
||||||
|
traits::is_sequence<Seq1>::value
|
||||||
|
, traits::is_sequence<Seq2>::value
|
||||||
|
>::value,
|
||||||
|
void
|
||||||
|
>::type
|
||||||
copy(Seq1 const& src, Seq2& dest)
|
copy(Seq1 const& src, Seq2& dest)
|
||||||
{
|
{
|
||||||
BOOST_STATIC_ASSERT(
|
BOOST_STATIC_ASSERT(
|
||||||
|
@ -9,6 +9,8 @@
|
|||||||
|
|
||||||
#include <boost/fusion/algorithm/iteration/accumulate_fwd.hpp>
|
#include <boost/fusion/algorithm/iteration/accumulate_fwd.hpp>
|
||||||
#include <boost/fusion/algorithm/iteration/fold.hpp>
|
#include <boost/fusion/algorithm/iteration/fold.hpp>
|
||||||
|
#include <boost/fusion/support/is_sequence.hpp>
|
||||||
|
#include <boost/utility/enable_if.hpp>
|
||||||
|
|
||||||
namespace boost { namespace fusion
|
namespace boost { namespace fusion
|
||||||
{
|
{
|
||||||
@ -23,14 +25,24 @@ namespace boost { namespace fusion
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename Sequence, typename State, typename F>
|
template <typename Sequence, typename State, typename F>
|
||||||
inline typename result_of::accumulate<Sequence, State const, F>::type
|
inline
|
||||||
|
typename
|
||||||
|
lazy_enable_if<
|
||||||
|
traits::is_sequence<Sequence>
|
||||||
|
, result_of::accumulate<Sequence, State const, F>
|
||||||
|
>::type
|
||||||
accumulate(Sequence& seq, State const& state, F f)
|
accumulate(Sequence& seq, State const& state, F f)
|
||||||
{
|
{
|
||||||
return fusion::fold(seq, state, f);
|
return fusion::fold(seq, state, f);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Sequence, typename State, typename F>
|
template <typename Sequence, typename State, typename F>
|
||||||
inline typename result_of::accumulate<Sequence const, State const, F>::type
|
inline
|
||||||
|
typename
|
||||||
|
lazy_enable_if<
|
||||||
|
traits::is_sequence<Sequence>
|
||||||
|
, result_of::accumulate<Sequence const, State const, F>
|
||||||
|
>::type
|
||||||
accumulate(Sequence const& seq, State const& state, F f)
|
accumulate(Sequence const& seq, State const& state, F f)
|
||||||
{
|
{
|
||||||
return fusion::fold(seq, state, f);
|
return fusion::fold(seq, state, f);
|
||||||
|
@ -7,6 +7,9 @@
|
|||||||
#if !defined(BOOST_FUSION_ACCUMULATE_FWD_HPP_INCLUDED)
|
#if !defined(BOOST_FUSION_ACCUMULATE_FWD_HPP_INCLUDED)
|
||||||
#define BOOST_FUSION_ACCUMULATE_FWD_HPP_INCLUDED
|
#define BOOST_FUSION_ACCUMULATE_FWD_HPP_INCLUDED
|
||||||
|
|
||||||
|
#include <boost/fusion/support/is_sequence.hpp>
|
||||||
|
#include <boost/utility/enable_if.hpp>
|
||||||
|
|
||||||
namespace boost { namespace fusion
|
namespace boost { namespace fusion
|
||||||
{
|
{
|
||||||
namespace result_of
|
namespace result_of
|
||||||
@ -16,11 +19,19 @@ namespace boost { namespace fusion
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename Sequence, typename State, typename F>
|
template <typename Sequence, typename State, typename F>
|
||||||
typename result_of::accumulate<Sequence, State const, F>::type
|
typename
|
||||||
|
lazy_enable_if<
|
||||||
|
traits::is_sequence<Sequence>
|
||||||
|
, result_of::accumulate<Sequence, State const, F>
|
||||||
|
>::type
|
||||||
accumulate(Sequence& seq, State const& state, F f);
|
accumulate(Sequence& seq, State const& state, F f);
|
||||||
|
|
||||||
template <typename Sequence, typename State, typename F>
|
template <typename Sequence, typename State, typename F>
|
||||||
typename result_of::accumulate<Sequence const, State const, F>::type
|
typename
|
||||||
|
lazy_enable_if<
|
||||||
|
traits::is_sequence<Sequence>
|
||||||
|
, result_of::accumulate<Sequence const, State const, F>
|
||||||
|
>::type
|
||||||
accumulate(Sequence const& seq, State const& state, F f);
|
accumulate(Sequence const& seq, State const& state, F f);
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
@ -11,6 +11,8 @@
|
|||||||
#include <boost/fusion/algorithm/iteration/detail/for_each.hpp>
|
#include <boost/fusion/algorithm/iteration/detail/for_each.hpp>
|
||||||
#include <boost/fusion/algorithm/iteration/detail/segmented_for_each.hpp>
|
#include <boost/fusion/algorithm/iteration/detail/segmented_for_each.hpp>
|
||||||
#include <boost/fusion/support/is_segmented.hpp>
|
#include <boost/fusion/support/is_segmented.hpp>
|
||||||
|
#include <boost/fusion/support/is_sequence.hpp>
|
||||||
|
#include <boost/utility/enable_if.hpp>
|
||||||
|
|
||||||
namespace boost { namespace fusion
|
namespace boost { namespace fusion
|
||||||
{
|
{
|
||||||
@ -24,14 +26,24 @@ namespace boost { namespace fusion
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename Sequence, typename F>
|
template <typename Sequence, typename F>
|
||||||
inline void
|
inline
|
||||||
|
typename
|
||||||
|
enable_if<
|
||||||
|
traits::is_sequence<Sequence>
|
||||||
|
, void
|
||||||
|
>::type
|
||||||
for_each(Sequence& seq, F const& f)
|
for_each(Sequence& seq, F const& f)
|
||||||
{
|
{
|
||||||
detail::for_each(seq, f, typename traits::is_segmented<Sequence>::type());
|
detail::for_each(seq, f, typename traits::is_segmented<Sequence>::type());
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Sequence, typename F>
|
template <typename Sequence, typename F>
|
||||||
inline void
|
inline
|
||||||
|
typename
|
||||||
|
enable_if<
|
||||||
|
traits::is_sequence<Sequence>
|
||||||
|
, void
|
||||||
|
>::type
|
||||||
for_each(Sequence const& seq, F const& f)
|
for_each(Sequence const& seq, F const& f)
|
||||||
{
|
{
|
||||||
detail::for_each(seq, f, typename traits::is_segmented<Sequence>::type());
|
detail::for_each(seq, f, typename traits::is_segmented<Sequence>::type());
|
||||||
|
@ -7,6 +7,9 @@
|
|||||||
#if !defined(BOOST_FUSION_FOR_EACH_FWD_HPP_INCLUDED)
|
#if !defined(BOOST_FUSION_FOR_EACH_FWD_HPP_INCLUDED)
|
||||||
#define BOOST_FUSION_FOR_EACH_FWD_HPP_INCLUDED
|
#define BOOST_FUSION_FOR_EACH_FWD_HPP_INCLUDED
|
||||||
|
|
||||||
|
#include <boost/fusion/support/is_sequence.hpp>
|
||||||
|
#include <boost/utility/enable_if.hpp>
|
||||||
|
|
||||||
namespace boost { namespace fusion
|
namespace boost { namespace fusion
|
||||||
{
|
{
|
||||||
namespace result_of
|
namespace result_of
|
||||||
@ -16,11 +19,21 @@ namespace boost { namespace fusion
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename Sequence, typename F>
|
template <typename Sequence, typename F>
|
||||||
void
|
inline
|
||||||
|
typename
|
||||||
|
enable_if<
|
||||||
|
traits::is_sequence<Sequence>
|
||||||
|
, void
|
||||||
|
>::type
|
||||||
for_each(Sequence& seq, F const& f);
|
for_each(Sequence& seq, F const& f);
|
||||||
|
|
||||||
template <typename Sequence, typename F>
|
template <typename Sequence, typename F>
|
||||||
void
|
inline
|
||||||
|
typename
|
||||||
|
enable_if<
|
||||||
|
traits::is_sequence<Sequence>
|
||||||
|
, void
|
||||||
|
>::type
|
||||||
for_each(Sequence const& seq, F const& f);
|
for_each(Sequence const& seq, F const& f);
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
@ -10,6 +10,8 @@
|
|||||||
|
|
||||||
#include <boost/fusion/algorithm/query/count_if.hpp>
|
#include <boost/fusion/algorithm/query/count_if.hpp>
|
||||||
#include <boost/fusion/algorithm/query/detail/count.hpp>
|
#include <boost/fusion/algorithm/query/detail/count.hpp>
|
||||||
|
#include <boost/fusion/support/is_sequence.hpp>
|
||||||
|
#include <boost/utility/enable_if.hpp>
|
||||||
|
|
||||||
namespace boost { namespace fusion
|
namespace boost { namespace fusion
|
||||||
{
|
{
|
||||||
@ -23,7 +25,12 @@ namespace boost { namespace fusion
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename Sequence, typename T>
|
template <typename Sequence, typename T>
|
||||||
inline int
|
inline
|
||||||
|
typename
|
||||||
|
enable_if<
|
||||||
|
traits::is_sequence<Sequence>
|
||||||
|
, int
|
||||||
|
>::type
|
||||||
count(Sequence const& seq, T const& x)
|
count(Sequence const& seq, T const& x)
|
||||||
{
|
{
|
||||||
detail::count_compare<T> f(x);
|
detail::count_compare<T> f(x);
|
||||||
|
@ -10,6 +10,8 @@
|
|||||||
|
|
||||||
#include <boost/fusion/algorithm/query/detail/count_if.hpp>
|
#include <boost/fusion/algorithm/query/detail/count_if.hpp>
|
||||||
#include <boost/fusion/support/category_of.hpp>
|
#include <boost/fusion/support/category_of.hpp>
|
||||||
|
#include <boost/fusion/support/is_sequence.hpp>
|
||||||
|
#include <boost/utility/enable_if.hpp>
|
||||||
|
|
||||||
namespace boost { namespace fusion
|
namespace boost { namespace fusion
|
||||||
{
|
{
|
||||||
@ -23,7 +25,12 @@ namespace boost { namespace fusion
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename Sequence, typename F>
|
template <typename Sequence, typename F>
|
||||||
inline int
|
inline
|
||||||
|
typename
|
||||||
|
enable_if<
|
||||||
|
traits::is_sequence<Sequence>
|
||||||
|
, int
|
||||||
|
>::type
|
||||||
count_if(Sequence const& seq, F f)
|
count_if(Sequence const& seq, F f)
|
||||||
{
|
{
|
||||||
return detail::count_if(
|
return detail::count_if(
|
||||||
|
@ -16,6 +16,9 @@
|
|||||||
#include <boost/fusion/sequence/intrinsic/begin.hpp>
|
#include <boost/fusion/sequence/intrinsic/begin.hpp>
|
||||||
#include <boost/fusion/sequence/intrinsic/end.hpp>
|
#include <boost/fusion/sequence/intrinsic/end.hpp>
|
||||||
#include <boost/fusion/adapted/mpl/mpl_iterator.hpp>
|
#include <boost/fusion/adapted/mpl/mpl_iterator.hpp>
|
||||||
|
#include <boost/fusion/support/is_sequence.hpp>
|
||||||
|
#include <boost/utility/enable_if.hpp>
|
||||||
|
#include <boost/mpl/if.hpp>
|
||||||
|
|
||||||
namespace boost { namespace fusion
|
namespace boost { namespace fusion
|
||||||
{
|
{
|
||||||
@ -53,18 +56,38 @@ namespace boost { namespace fusion
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct use_default;
|
||||||
|
|
||||||
|
template <class T, class Default>
|
||||||
|
struct fusion_default_help
|
||||||
|
: mpl::if_<
|
||||||
|
is_same<T, use_default>
|
||||||
|
, Default
|
||||||
|
, T
|
||||||
|
>
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
template <
|
template <
|
||||||
typename Sequence
|
typename Sequence
|
||||||
, typename First
|
, typename First
|
||||||
, typename Last = typename compute_erase_last<Sequence, First>::type>
|
, typename Last = use_default>
|
||||||
struct erase
|
struct erase
|
||||||
{
|
{
|
||||||
typedef typename result_of::begin<Sequence>::type seq_first_type;
|
typedef typename result_of::begin<Sequence>::type seq_first_type;
|
||||||
typedef typename result_of::end<Sequence>::type seq_last_type;
|
typedef typename result_of::end<Sequence>::type seq_last_type;
|
||||||
BOOST_STATIC_ASSERT((!result_of::equal_to<seq_first_type, seq_last_type>::value));
|
BOOST_STATIC_ASSERT((!result_of::equal_to<seq_first_type, seq_last_type>::value));
|
||||||
|
|
||||||
typedef typename convert_iterator<First>::type first_type;
|
typedef First FirstType;
|
||||||
typedef typename convert_iterator<Last>::type last_type;
|
typedef typename
|
||||||
|
fusion_default_help<
|
||||||
|
Last
|
||||||
|
, typename compute_erase_last<Sequence, First>::type
|
||||||
|
>::type
|
||||||
|
LastType;
|
||||||
|
|
||||||
|
typedef typename convert_iterator<FirstType>::type first_type;
|
||||||
|
typedef typename convert_iterator<LastType>::type last_type;
|
||||||
typedef iterator_range<seq_first_type, first_type> left_type;
|
typedef iterator_range<seq_first_type, first_type> left_type;
|
||||||
typedef iterator_range<last_type, seq_last_type> right_type;
|
typedef iterator_range<last_type, seq_last_type> right_type;
|
||||||
typedef joint_view<left_type, right_type> type;
|
typedef joint_view<left_type, right_type> type;
|
||||||
@ -72,7 +95,11 @@ namespace boost { namespace fusion
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename Sequence, typename First>
|
template <typename Sequence, typename First>
|
||||||
typename result_of::erase<Sequence const, First>::type
|
typename
|
||||||
|
lazy_enable_if<
|
||||||
|
traits::is_sequence<Sequence>
|
||||||
|
, typename result_of::erase<Sequence const, First>
|
||||||
|
>::type
|
||||||
erase(Sequence const& seq, First const& first)
|
erase(Sequence const& seq, First const& first)
|
||||||
{
|
{
|
||||||
typedef result_of::erase<Sequence const, First> result_of;
|
typedef result_of::erase<Sequence const, First> result_of;
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
#include <boost/fusion/sequence/intrinsic/begin.hpp>
|
#include <boost/fusion/sequence/intrinsic/begin.hpp>
|
||||||
#include <boost/fusion/sequence/intrinsic/end.hpp>
|
#include <boost/fusion/sequence/intrinsic/end.hpp>
|
||||||
#include <boost/fusion/adapted/mpl/mpl_iterator.hpp>
|
#include <boost/fusion/adapted/mpl/mpl_iterator.hpp>
|
||||||
|
#include <boost/fusion/support/is_sequence.hpp>
|
||||||
|
#include <boost/utility/enable_if.hpp>
|
||||||
|
|
||||||
namespace boost { namespace fusion
|
namespace boost { namespace fusion
|
||||||
{
|
{
|
||||||
@ -38,8 +40,12 @@ namespace boost { namespace fusion
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename Sequence, typename Position, typename T>
|
template <typename Sequence, typename Position, typename T>
|
||||||
inline typename result_of::insert<
|
inline
|
||||||
Sequence const, Position, T>::type
|
typename
|
||||||
|
lazy_enable_if<
|
||||||
|
traits::is_sequence<Sequence>
|
||||||
|
, result_of::insert<Sequence const, Position, T>
|
||||||
|
>::type
|
||||||
insert(Sequence const& seq, Position const& pos, T const& x)
|
insert(Sequence const& seq, Position const& pos, T const& x)
|
||||||
{
|
{
|
||||||
typedef result_of::insert<
|
typedef result_of::insert<
|
||||||
|
@ -10,6 +10,8 @@
|
|||||||
#include <boost/fusion/support/detail/as_fusion_element.hpp>
|
#include <boost/fusion/support/detail/as_fusion_element.hpp>
|
||||||
#include <boost/fusion/view/joint_view/joint_view.hpp>
|
#include <boost/fusion/view/joint_view/joint_view.hpp>
|
||||||
#include <boost/fusion/view/single_view/single_view.hpp>
|
#include <boost/fusion/view/single_view/single_view.hpp>
|
||||||
|
#include <boost/fusion/support/is_sequence.hpp>
|
||||||
|
#include <boost/utility/enable_if.hpp>
|
||||||
|
|
||||||
namespace boost { namespace fusion
|
namespace boost { namespace fusion
|
||||||
{
|
{
|
||||||
@ -24,7 +26,12 @@ namespace boost { namespace fusion
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename Sequence, typename T>
|
template <typename Sequence, typename T>
|
||||||
inline typename result_of::push_back<Sequence const, T>::type
|
inline
|
||||||
|
typename
|
||||||
|
lazy_enable_if<
|
||||||
|
traits::is_sequence<Sequence>
|
||||||
|
, result_of::push_back<Sequence const, T>
|
||||||
|
>::type
|
||||||
push_back(Sequence const& seq, T const& x)
|
push_back(Sequence const& seq, T const& x)
|
||||||
{
|
{
|
||||||
typedef typename result_of::push_back<Sequence const, T> push_back;
|
typedef typename result_of::push_back<Sequence const, T> push_back;
|
||||||
|
@ -10,6 +10,8 @@
|
|||||||
#include <boost/fusion/support/detail/as_fusion_element.hpp>
|
#include <boost/fusion/support/detail/as_fusion_element.hpp>
|
||||||
#include <boost/fusion/view/joint_view/joint_view.hpp>
|
#include <boost/fusion/view/joint_view/joint_view.hpp>
|
||||||
#include <boost/fusion/view/single_view/single_view.hpp>
|
#include <boost/fusion/view/single_view/single_view.hpp>
|
||||||
|
#include <boost/fusion/support/is_sequence.hpp>
|
||||||
|
#include <boost/utility/enable_if.hpp>
|
||||||
|
|
||||||
namespace boost { namespace fusion
|
namespace boost { namespace fusion
|
||||||
{
|
{
|
||||||
@ -24,7 +26,12 @@ namespace boost { namespace fusion
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename Sequence, typename T>
|
template <typename Sequence, typename T>
|
||||||
inline typename result_of::push_front<Sequence const, T>::type
|
inline
|
||||||
|
typename
|
||||||
|
lazy_enable_if<
|
||||||
|
traits::is_sequence<Sequence>
|
||||||
|
, result_of::push_front<Sequence const, T>
|
||||||
|
>::type
|
||||||
push_front(Sequence const& seq, T const& x)
|
push_front(Sequence const& seq, T const& x)
|
||||||
{
|
{
|
||||||
typedef typename result_of::push_front<Sequence const, T> push_front;
|
typedef typename result_of::push_front<Sequence const, T> push_front;
|
||||||
|
@ -9,6 +9,8 @@
|
|||||||
|
|
||||||
#include <boost/fusion/view/transform_view/transform_view.hpp>
|
#include <boost/fusion/view/transform_view/transform_view.hpp>
|
||||||
#include <boost/fusion/algorithm/transformation/detail/replace.hpp>
|
#include <boost/fusion/algorithm/transformation/detail/replace.hpp>
|
||||||
|
#include <boost/fusion/support/is_sequence.hpp>
|
||||||
|
#include <boost/utility/enable_if.hpp>
|
||||||
|
|
||||||
namespace boost { namespace fusion
|
namespace boost { namespace fusion
|
||||||
{
|
{
|
||||||
@ -22,7 +24,12 @@ namespace boost { namespace fusion
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename Sequence, typename T>
|
template <typename Sequence, typename T>
|
||||||
inline typename result_of::replace<Sequence const, T>::type
|
inline
|
||||||
|
typename
|
||||||
|
enable_if<
|
||||||
|
traits::is_sequence<Sequence>
|
||||||
|
, typename result_of::replace<Sequence const, T>::type
|
||||||
|
>::type
|
||||||
replace(Sequence const& seq, T const& old_value, T const& new_value)
|
replace(Sequence const& seq, T const& old_value, T const& new_value)
|
||||||
{
|
{
|
||||||
typedef typename result_of::replace<Sequence const, T>::type result;
|
typedef typename result_of::replace<Sequence const, T>::type result;
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
#include <boost/fusion/view/transform_view/transform_view.hpp>
|
#include <boost/fusion/view/transform_view/transform_view.hpp>
|
||||||
#include <boost/fusion/algorithm/transformation/detail/replace_if.hpp>
|
#include <boost/fusion/algorithm/transformation/detail/replace_if.hpp>
|
||||||
|
#include <boost/fusion/support/is_sequence.hpp>
|
||||||
#include <boost/utility/enable_if.hpp>
|
#include <boost/utility/enable_if.hpp>
|
||||||
#include <boost/type_traits/is_same.hpp>
|
#include <boost/type_traits/is_same.hpp>
|
||||||
|
|
||||||
@ -24,7 +25,12 @@ namespace boost { namespace fusion
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename Sequence, typename F, typename T>
|
template <typename Sequence, typename F, typename T>
|
||||||
inline typename result_of::replace_if<Sequence const, F, T>::type
|
inline
|
||||||
|
typename
|
||||||
|
enable_if<
|
||||||
|
traits::is_sequence<Sequence>
|
||||||
|
, typename result_of::replace_if<Sequence const, F, T>::type
|
||||||
|
>::type
|
||||||
replace_if(Sequence const& seq, F pred, T const& new_value)
|
replace_if(Sequence const& seq, F pred, T const& new_value)
|
||||||
{
|
{
|
||||||
typedef typename result_of::replace_if<Sequence const, F, T>::type result;
|
typedef typename result_of::replace_if<Sequence const, F, T>::type result;
|
||||||
|
@ -8,6 +8,8 @@
|
|||||||
#define FUSION_REVERSE_07212005_1230
|
#define FUSION_REVERSE_07212005_1230
|
||||||
|
|
||||||
#include <boost/fusion/view/reverse_view/reverse_view.hpp>
|
#include <boost/fusion/view/reverse_view/reverse_view.hpp>
|
||||||
|
#include <boost/fusion/support/is_sequence.hpp>
|
||||||
|
#include <boost/utility/enable_if.hpp>
|
||||||
|
|
||||||
namespace boost { namespace fusion
|
namespace boost { namespace fusion
|
||||||
{
|
{
|
||||||
@ -21,7 +23,12 @@ namespace boost { namespace fusion
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename Sequence>
|
template <typename Sequence>
|
||||||
inline reverse_view<Sequence const>
|
inline
|
||||||
|
typename
|
||||||
|
enable_if<
|
||||||
|
traits::is_sequence<Sequence>
|
||||||
|
, reverse_view<Sequence const>
|
||||||
|
>::type
|
||||||
reverse(Sequence const& view)
|
reverse(Sequence const& view)
|
||||||
{
|
{
|
||||||
return reverse_view<Sequence const>(view);
|
return reverse_view<Sequence const>(view);
|
||||||
|
@ -21,6 +21,8 @@
|
|||||||
#include <boost/fusion/iterator/equal_to.hpp>
|
#include <boost/fusion/iterator/equal_to.hpp>
|
||||||
#include <boost/fusion/container/list/detail/reverse_cons.hpp>
|
#include <boost/fusion/container/list/detail/reverse_cons.hpp>
|
||||||
#include <boost/fusion/iterator/detail/segment_sequence.hpp>
|
#include <boost/fusion/iterator/detail/segment_sequence.hpp>
|
||||||
|
#include <boost/fusion/support/is_sequence.hpp>
|
||||||
|
#include <boost/utility/enable_if.hpp>
|
||||||
|
|
||||||
// Invariants:
|
// Invariants:
|
||||||
// - Each segmented iterator has a stack
|
// - Each segmented iterator has a stack
|
||||||
@ -45,11 +47,19 @@ namespace boost { namespace fusion
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename Sequence, typename T>
|
template <typename Sequence, typename T>
|
||||||
typename result_of::push_back<Sequence const, T>::type
|
typename
|
||||||
|
lazy_enable_if<
|
||||||
|
traits::is_sequence<Sequence>
|
||||||
|
, result_of::push_back<Sequence const, T>
|
||||||
|
>::type
|
||||||
push_back(Sequence const& seq, T const& x);
|
push_back(Sequence const& seq, T const& x);
|
||||||
|
|
||||||
template <typename Sequence, typename T>
|
template <typename Sequence, typename T>
|
||||||
typename result_of::push_front<Sequence const, T>::type
|
typename
|
||||||
|
lazy_enable_if<
|
||||||
|
traits::is_sequence<Sequence>
|
||||||
|
, result_of::push_front<Sequence const, T>
|
||||||
|
>::type
|
||||||
push_front(Sequence const& seq, T const& x);
|
push_front(Sequence const& seq, T const& x);
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user