merge RC_1_32_0 fixes

[SVN r26325]
This commit is contained in:
Aleksey Gurtovoy
2004-11-28 01:58:27 +00:00
parent 130ab6a9d3
commit 3b04dada5d
41 changed files with 922 additions and 412 deletions

View File

@@ -3,6 +3,7 @@
#define BOOST_MPL_AUX_PARTITION_OP_HPP_INCLUDED
// Copyright Eric Friedman 2003
// Copyright Aleksey Gurtovoy 2004
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -18,33 +19,28 @@
#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/if.hpp>
#include <boost/mpl/pair.hpp>
#include <boost/mpl/deref.hpp>
#include <boost/mpl/push_front.hpp>
#include <boost/mpl/aux_/lambda_spec.hpp>
namespace boost { namespace mpl {
namespace aux {
template <typename Predicate>
template< typename Pred, typename In1Op, typename In2Op >
struct partition_op
{
template <typename State, typename Iter>
template< typename State, typename T >
struct apply
{
private:
typedef typename State::first first_;
typedef typename State::second second_;
typedef typename deref<Iter>::type t_;
typedef typename apply1< Predicate,t_ >::type pred_;
typedef typename apply1< Pred,T >::type pred_;
typedef typename eval_if<
pred_
, push_front< first_, t_ >
, push_front< second_, t_ >
, apply2<In1Op,first_,T>
, apply2<In2Op,second_,T>
>::type result_;
public:
typedef typename if_<
pred_
, pair< result_,second_ >
@@ -55,7 +51,7 @@ struct partition_op
} // namespace aux
BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1,aux::partition_op)
BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(3, aux::partition_op)
}}

View File

@@ -36,6 +36,10 @@
namespace boost { namespace mpl {
#if !defined(AUX778076_SEQUENCE_BASE_NAME)
# define AUX778076_SEQUENCE_BASE_NAME AUX778076_SEQUENCE_NAME
#endif
#if !defined(AUX778076_SEQUENCE_INTEGRAL_WRAPPER)
# define AUX778076_SEQUENCE_PARAM_NAME T
@@ -43,7 +47,7 @@ namespace boost { namespace mpl {
# define AUX778076_SEQUENCE_DEFAULT na
# define AUX778076_SEQUENCE_NAME_N(n) \
BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,n) \
BOOST_PP_CAT(AUX778076_SEQUENCE_BASE_NAME,n) \
/**/
# define AUX778076_SEQUENCE_PARAMS() \
@@ -209,6 +213,7 @@ struct AUX778076_SEQUENCE_NAME
# undef AUX778076_SEQUENCE_TEMPLATE_PARAM
# undef AUX778076_SEQUENCE_PARAM_NAME
# undef AUX778076_SEQUENCE_LIMIT
# undef AUX778076_SEQUENCE_BASE_NAME
# undef AUX778076_SEQUENCE_NAME
# undef AUX778076_SEQUENCE_INTEGRAL_WRAPPER

View File

@@ -15,104 +15,104 @@
// $Revision$
#include <boost/mpl/iterator_tags.hpp>
#include <boost/mpl/plus.hpp>
#include <boost/mpl/minus.hpp>
#include <boost/mpl/advance_fwd.hpp>
#include <boost/mpl/distance_fwd.hpp>
#include <boost/mpl/next_prior.hpp>
#include <boost/mpl/deref.hpp>
#include <boost/mpl/int.hpp>
#include <boost/mpl/aux_/value_wknd.hpp>
#include <boost/mpl/aux_/iterator_names.hpp>
#include <boost/mpl/aux_/lambda_spec.hpp>
#include <boost/mpl/aux_/config/ctps.hpp>
#include <boost/mpl/aux_/nttp_decl.hpp>
#include <boost/mpl/aux_/value_wknd.hpp>
#include <boost/mpl/aux_/config/ctps.hpp>
namespace boost { namespace mpl {
namespace aux {
template< typename T, int N >
struct single_element_iter;
// random access support
template< typename T, BOOST_MPL_AUX_NTTP_DECL(int, N) >
struct single_iter_base
{
typedef random_access_iterator_tag category;
typedef mpl::int_<N> position;
template< typename D >
struct BOOST_MPL_AUX_ITERATOR_ADVANCE
{
typedef plus< mpl::int_<N>,D > n_;
typedef single_element_iter<
T
, BOOST_MPL_AUX_VALUE_WKND(n_)::value
> type;
};
template< typename U >
struct BOOST_MPL_AUX_ITERATOR_DISTANCE
{
typedef typename minus<
typename U::position
, mpl::int_<N>
>::type type;
};
};
#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
namespace aux {
template< typename T, BOOST_MPL_AUX_NTTP_DECL(int, is_last_) >
struct sel_iter;
template< typename T >
struct single_element_iter<T,0>
: single_iter_base<T,0>
struct sel_iter<T,0>
{
typedef single_element_iter<T,1> next;
typedef random_access_iterator_tag category;
typedef sel_iter<T,1> next;
typedef T type;
};
template< typename T >
struct single_element_iter<T,1>
: single_iter_base<T,1>
struct sel_iter<T,1>
{
typedef random_access_iterator_tag category;
typedef sel_iter<T,0> prior;
};
} // namespace aux
template< typename T, BOOST_MPL_AUX_NTTP_DECL(int, is_last_), typename Distance >
struct advance< aux::sel_iter<T,is_last_>,Distance>
{
typedef aux::sel_iter<
T
, ( is_last_ + BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Distance) )
> type;
};
template<
typename T
, BOOST_MPL_AUX_NTTP_DECL(int, l1)
, BOOST_MPL_AUX_NTTP_DECL(int, l2)
>
struct distance< aux::sel_iter<T,l1>, aux::sel_iter<T,l2> >
: int_<( l2 - l1 )>
{
typedef single_element_iter<T,0> prior;
};
#else
template< BOOST_MPL_AUX_NTTP_DECL(int, N) > struct single_iter_impl
namespace aux {
struct sel_iter_tag;
template< typename T, BOOST_MPL_AUX_NTTP_DECL(int, is_last_) >
struct sel_iter
{
template< typename T > struct result_;
enum { pos_ = is_last_ };
typedef aux::sel_iter_tag tag;
typedef random_access_iterator_tag category;
typedef sel_iter<T,(is_last_ + 1)> next;
typedef sel_iter<T,(is_last_ - 1)> prior;
typedef T type;
};
template<>
struct single_iter_impl<0>
} // namespace aux
template<> struct advance_impl<aux::sel_iter_tag>
{
template< typename T > struct result_
: single_iter_base<T,0>
template< typename Iterator, typename N > struct apply
{
typedef single_element_iter<T,1> next;
typedef T type;
enum { pos_ = Iterator::pos_, n_ = N::value };
typedef aux::sel_iter<
typename Iterator::type
, (pos_ + n_)
> type;
};
};
template<>
struct single_iter_impl<1>
template<> struct distance_impl<aux::sel_iter_tag>
{
template< typename T > struct result_
: single_iter_base<T,1>
template< typename Iter1, typename Iter2 > struct apply
{
typedef single_element_iter<T,0> prior;
enum { pos1_ = Iter1::pos_, pos2_ = Iter2::pos_ };
typedef int_<( pos2_ - pos1_ )> type;
BOOST_STATIC_CONSTANT(int, value = ( pos2_ - pos1_ ));
};
};
template< typename T, BOOST_MPL_AUX_NTTP_DECL(int, N) >
struct single_element_iter
: single_iter_impl<N>::template result_<T>
{
};
#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
} // namespace aux
}}
#endif // BOOST_MPL_AUX_SINGLE_ELEMENT_ITER_HPP_INCLUDED

View File

@@ -14,91 +14,108 @@
// $Date$
// $Revision$
#include <boost/mpl/apply.hpp>
#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/reverse_fold.hpp>
#include <boost/mpl/empty.hpp>
#include <boost/mpl/front.hpp>
#include <boost/mpl/identity.hpp>
#include <boost/mpl/partition.hpp>
#include <boost/mpl/pop_front.hpp>
#include <boost/mpl/push_front.hpp>
#include <boost/mpl/protect.hpp>
#include <boost/mpl/aux_/traits_lambda_spec.hpp>
#include <boost/mpl/copy.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/mpl/back_inserter.hpp>
#include <boost/mpl/front_inserter.hpp>
#include <boost/mpl/iterator_range.hpp>
#include <boost/mpl/joint_view.hpp>
#include <boost/mpl/single_view.hpp>
#include <boost/mpl/begin_end.hpp>
#include <boost/mpl/empty.hpp>
#include <boost/mpl/deref.hpp>
#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/apply.hpp>
#include <boost/mpl/identity.hpp>
#include <boost/mpl/less.hpp>
#include <boost/mpl/aux_/na.hpp>
namespace boost { namespace mpl {
namespace boost { namespace mpl { namespace aux {
namespace aux {
template< typename Seq, typename Pred >
struct quick_sort;
template < typename Sequence, typename Predicate > struct quick_sort;
template <typename Predicate, typename Pivot>
// agurt, 10/nov/04: for the sake of deficeint compilers
template< typename Pred, typename Pivot >
struct quick_sort_pred
{
template <typename T>
struct apply
template< typename T > struct apply
{
typedef typename apply2< Predicate, T, Pivot >::type
type;
typedef typename apply2<Pred,T,Pivot>::type type;
};
};
template <typename Sequence, typename Predicate>
template<
typename Seq
, typename Pred
>
struct quick_sort_impl
{
private:
typedef typename front<Sequence>::type pivot_;
typedef typename pop_front<Sequence>::type seq_;
typedef typename begin<Seq>::type pivot;
typedef typename partition<
seq_
, protect< quick_sort_pred<Predicate,pivot_> >
iterator_range<
typename next<pivot>::type
, typename end<Seq>::type
>
, protect< aux::quick_sort_pred< Pred, typename deref<pivot>::type > >
, back_inserter< vector<> >
, back_inserter< vector<> >
>::type partitioned;
typedef typename quick_sort<
typename first<partitioned>::type, Predicate
>::type first_part;
typedef typename quick_sort<
typename second<partitioned>::type, Predicate
>::type second_part;
public:
typedef typename reverse_fold<
first_part
, typename push_front< second_part,pivot_ >::type
, push_front<_,_>
>::type type;
typedef typename quick_sort< typename partitioned::first, Pred >::type part1;
typedef typename quick_sort< typename partitioned::second, Pred >::type part2;
typedef joint_view<
joint_view< part1, single_view< typename deref<pivot>::type > >
, part2
> type;
};
template <typename Sequence, typename Predicate>
template<
typename Seq
, typename Pred
>
struct quick_sort
: eval_if<
empty<Sequence>
, identity< Sequence >
, quick_sort_impl< Sequence,Predicate >
empty<Seq>
, identity<Seq>
, quick_sort_impl<Seq,Pred>
>
{
};
} // namespace aux
template< typename Tag >
template <
typename Sequence
, typename Pred
, typename In
>
struct sort_impl
{
template< typename Sequence, typename Predicate >
struct apply
{
typedef typename aux::quick_sort<
Sequence, Predicate
>::type type;
};
typedef typename quick_sort<
Sequence
, typename if_na<Pred,less<> >::type
>::type result_;
typedef typename copy<result_,In>::type type;
};
BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2,sort_impl)
template <
typename Sequence
, typename Pred
, typename In
>
struct reverse_sort_impl
{
typedef typename quick_sort<
Sequence
, typename if_na<Pred,less<> >::type
>::type result_;
typedef typename reverse_copy<result_,In>::type type;
};
}}
}}}
#endif // BOOST_MPL_AUX_SORT_IMPL_HPP_INCLUDED

View File

@@ -0,0 +1,58 @@
#ifndef BOOST_MPL_DEQUE_HPP_INCLUDED
#define BOOST_MPL_DEQUE_HPP_INCLUDED
// Copyright Aleksey Gurtovoy 2000-2004
//
// 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)
//
// See http://www.boost.org/libs/mpl for documentation.
// $Source$
// $Date$
// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/limits/vector.hpp>
# include <boost/mpl/aux_/na.hpp>
# include <boost/mpl/aux_/config/preprocessor.hpp>
# include <boost/preprocessor/inc.hpp>
# include <boost/preprocessor/cat.hpp>
# include <boost/preprocessor/stringize.hpp>
#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)
# define AUX778076_DEQUE_HEADER \
BOOST_PP_CAT(vector, BOOST_MPL_LIMIT_VECTOR_SIZE).hpp \
/**/
#else
# define AUX778076_DEQUE_HEADER \
BOOST_PP_CAT(vector, BOOST_MPL_LIMIT_VECTOR_SIZE)##.hpp \
/**/
#endif
# include BOOST_PP_STRINGIZE(boost/mpl/vector/AUX778076_DEQUE_HEADER)
# undef AUX778076_DEQUE_HEADER
#endif
#include <boost/mpl/aux_/config/use_preprocessed.hpp>
#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
&& !defined(BOOST_MPL_PREPROCESSING_MODE)
# define BOOST_MPL_PREPROCESSED_HEADER deque.hpp
# include <boost/mpl/aux_/include_preprocessed.hpp>
#else
# include <boost/mpl/limits/vector.hpp>
# define AUX778076_SEQUENCE_NAME deque
# define AUX778076_SEQUENCE_BASE_NAME vector
# define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_VECTOR_SIZE
# include <boost/mpl/aux_/sequence_wrapper.hpp>
#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
#endif // BOOST_MPL_DEQUE_HPP_INCLUDED

View File

@@ -20,7 +20,7 @@ namespace boost { namespace mpl {
BOOST_MPL_AUX_COMMON_NAME_WKND(distance)
template< typename Tag > struct advance_impl;
template< typename Tag > struct distance_impl;
template< typename First, typename Last > struct distance;
}}

View File

@@ -0,0 +1,42 @@
#ifndef BOOST_MPL_EMPTY_SEQUENCE_HPP_INCLUDED
#define BOOST_MPL_EMPTY_SEQUENCE_HPP_INCLUDED
// Copyright Aleksey Gurtovoy 2004
// Copyright Alexander Nasonov 2004
//
// 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)
//
// See http://www.boost.org/libs/mpl for documentation.
// $Source$
// $Date$
// $Revision$
#include <boost/mpl/size_fwd.hpp>
#include <boost/mpl/int.hpp>
#include <boost/mpl/iterator_tags.hpp>
namespace boost { namespace mpl {
struct empty_sequence
{
struct tag;
struct begin { typedef random_access_iterator_tag category; };
typedef begin end;
};
template<>
struct size_impl<empty_sequence::tag>
{
template< typename Sequence > struct apply
: int_<0>
{
};
};
}}
#endif // #ifndef BOOST_MPL_EMPTY_SEQUENCE_HPP_INCLUDED

View File

@@ -25,14 +25,14 @@ namespace boost { namespace mpl {
template<
typename BOOST_MPL_AUX_NA_PARAM(Sequence)
, typename BOOST_MPL_AUX_NA_PARAM(First_or_T)
, typename BOOST_MPL_AUX_NA_PARAM(First)
, typename BOOST_MPL_AUX_NA_PARAM(Last)
>
struct erase
: erase_impl< typename sequence_tag<Sequence>::type >
::template apply< Sequence,First_or_T,Last >
::template apply< Sequence,First,Last >
{
BOOST_MPL_AUX_LAMBDA_SUPPORT(3,erase,(Sequence,First_or_T,Last))
BOOST_MPL_AUX_LAMBDA_SUPPORT(3,erase,(Sequence,First,Last))
};
BOOST_MPL_AUX_NA_SPEC(3,erase)

View File

@@ -18,6 +18,7 @@
#include <boost/mpl/aux_/na_spec.hpp>
#include <boost/mpl/aux_/lambda_support.hpp>
#include <boost/mpl/aux_/config/msvc.hpp>
#include <boost/mpl/aux_/config/gcc.hpp>
#include <boost/mpl/aux_/config/workaround.hpp>
namespace boost { namespace mpl {
@@ -28,13 +29,16 @@ template<
, typename BOOST_MPL_AUX_NA_PARAM(F2)
>
struct eval_if
#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
: if_<C,F1,F2>::type
{
#else
#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
|| ( BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, >= 0x0300) \
&& BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0304)) \
)
{
typedef typename if_<C,F1,F2>::type f_;
typedef typename f_::type type;
#else
: if_<C,F1,F2>::type
{
#endif
BOOST_MPL_AUX_LAMBDA_SUPPORT(3,eval_if,(C,F1,F2))
};
@@ -47,13 +51,16 @@ template<
, typename F2
>
struct eval_if_c
#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
: if_c<C,F1,F2>::type
{
#else
#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
|| ( BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, >= 0x0300) \
&& BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0304)) \
)
{
typedef typename if_c<C,F1,F2>::type f_;
typedef typename f_::type type;
#else
: if_c<C,F1,F2>::type
{
#endif
};

View File

@@ -18,9 +18,9 @@
namespace boost { namespace mpl {
struct forward_iterator_tag : int_<0> {};
struct bidirectional_iterator_tag : int_<1> {};
struct random_access_iterator_tag : int_<2> {};
struct forward_iterator_tag : int_<0> { typedef forward_iterator_tag type; };
struct bidirectional_iterator_tag : int_<1> { typedef bidirectional_iterator_tag type; };
struct random_access_iterator_tag : int_<2> { typedef random_access_iterator_tag type; };
}}

View File

@@ -24,17 +24,17 @@
# include <boost/preprocessor/stringize.hpp>
#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)
# define AUX778076_HEADER \
# define AUX778076_LIST_HEADER \
BOOST_PP_CAT(list,BOOST_MPL_LIMIT_LIST_SIZE).hpp \
/**/
#else
# define AUX778076_HEADER \
# define AUX778076_LIST_HEADER \
BOOST_PP_CAT(list,BOOST_MPL_LIMIT_LIST_SIZE)##.hpp \
/**/
#endif
# include BOOST_PP_STRINGIZE(boost/mpl/list/AUX778076_HEADER)
# undef AUX778076_HEADER
# include BOOST_PP_STRINGIZE(boost/mpl/list/AUX778076_LIST_HEADER)
# undef AUX778076_LIST_HEADER
#endif
#include <boost/mpl/aux_/config/use_preprocessed.hpp>

View File

@@ -16,12 +16,12 @@
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/stringize.hpp>
# define AUX_PREPROCESSED_HEADER \
# define AUX778076_HEADER \
aux_/preprocessed/plain/BOOST_MPL_PREPROCESSED_HEADER \
/**/
# include BOOST_PP_STRINGIZE(boost/mpl/list/AUX_PREPROCESSED_HEADER)
# include BOOST_PP_STRINGIZE(boost/mpl/list/AUX778076_HEADER)
# undef AUX_PREPROCESSED_HEADER
# undef AUX778076_HEADER
#undef BOOST_MPL_PREPROCESSED_HEADER

View File

@@ -36,6 +36,7 @@ struct list1_c
>
{
typedef list1_c type;
typedef T value_type;
};
#else
@@ -58,6 +59,7 @@ struct BOOST_PP_CAT(BOOST_PP_CAT(list,i),_c)
>
{
typedef BOOST_PP_CAT(BOOST_PP_CAT(list,i),_c) type;
typedef T value_type;
};
# undef MPL_AUX_LIST_C_TAIL

View File

@@ -24,17 +24,17 @@
# include <boost/preprocessor/stringize.hpp>
#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)
# define AUX778076_HEADER \
# define AUX778076_LIST_C_HEADER \
BOOST_PP_CAT(BOOST_PP_CAT(list,BOOST_MPL_LIMIT_LIST_SIZE),_c).hpp \
/**/
#else
# define AUX778076_HEADER \
# define AUX778076_LIST_C_HEADER \
BOOST_PP_CAT(BOOST_PP_CAT(list,BOOST_MPL_LIMIT_LIST_SIZE),_c)##.hpp \
/**/
#endif
# include BOOST_PP_STRINGIZE(boost/mpl/list/AUX778076_HEADER)
# undef AUX778076_HEADER
# include BOOST_PP_STRINGIZE(boost/mpl/list/AUX778076_LIST_C_HEADER)
# undef AUX778076_LIST_C_HEADER
# include <climits>
#endif

19
include/boost/mpl/max.hpp Normal file
View File

@@ -0,0 +1,19 @@
#ifndef BOOST_MPL_MAX_HPP_INCLUDED
#define BOOST_MPL_MAX_HPP_INCLUDED
// Copyright Aleksey Gurtovoy 2004
//
// 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)
//
// See http://www.boost.org/libs/mpl for documentation.
// $Source$
// $Date$
// $Revision$
#include <boost/mpl/min_max.hpp>
#endif // BOOST_MPL_MAX_HPP_INCLUDED

19
include/boost/mpl/min.hpp Normal file
View File

@@ -0,0 +1,19 @@
#ifndef BOOST_MPL_MIN_HPP_INCLUDED
#define BOOST_MPL_MIN_HPP_INCLUDED
// Copyright Aleksey Gurtovoy 2004
//
// 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)
//
// See http://www.boost.org/libs/mpl for documentation.
// $Source$
// $Date$
// $Revision$
#include <boost/mpl/min_max.hpp>
#endif // BOOST_MPL_MIN_HPP_INCLUDED

View File

@@ -14,7 +14,6 @@
// $Date$
// $Revision$
#include <boost/mpl/apply_wrap.hpp>
#include <boost/mpl/aux_/config/msvc.hpp>
#include <boost/mpl/aux_/config/workaround.hpp>
@@ -37,45 +36,6 @@ template< typename SourceTag, typename TargetTag > struct BOOST_MPL_AUX_NUMERIC_
template< typename N > struct apply;
};
namespace aux {
template<
typename F
, typename Tag1
, typename Tag2
>
struct cast1st_impl
{
template< typename N1, typename N2 > struct apply
: apply_wrap2<
F
, typename apply_wrap1< BOOST_MPL_AUX_NUMERIC_CAST<Tag1,Tag2>,N1 >::type
, N2
>
{
};
};
template<
typename F
, typename Tag1
, typename Tag2
>
struct cast2nd_impl
{
template< typename N1, typename N2 > struct apply
: apply_wrap2<
F
, N1
, typename apply_wrap1< BOOST_MPL_AUX_NUMERIC_CAST<Tag2,Tag1>,N2 >::type
>
{
};
};
} // namespace aux
}}
#endif // BOOST_MPL_NUMERIC_CAST_HPP_INCLUDED

View File

@@ -24,132 +24,120 @@
#include <boost/mpl/min_max.hpp>
#include <boost/mpl/pair.hpp>
#include <boost/mpl/iterator_tags.hpp>
#include <boost/mpl/lambda.hpp>
#include <boost/mpl/aux_/msvc_eti_base.hpp>
#include <boost/mpl/aux_/iterator_names.hpp>
#include <boost/mpl/aux_/config/ctps.hpp>
#include <boost/mpl/aux_/na_spec.hpp>
namespace boost { namespace mpl {
namespace aux {
struct pair_iter_tag;
#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
template< typename I1, typename I2, typename Category >
template< typename Iter1, typename Iter2, typename Category >
struct pair_iter;
template< typename Category >
struct pair_iter_ops
template< typename Category > struct prior_pair_iter
{
template< typename I1, typename I2 > struct result_
template< typename Iter1, typename Iter2 > struct apply
{
typedef typename mpl::next<I1>::type i1_;
typedef typename mpl::next<I2>::type i2_;
typedef pair_iter<i1_,i2_,Category> next;
typedef pair< typename deref<I1>::type, typename deref<I2>::type > type;
typedef typename mpl::prior<Iter1>::type i1_;
typedef typename mpl::prior<Iter2>::type i2_;
typedef pair_iter<i1_,i2_,Category> type;
};
};
template<>
struct pair_iter_ops<bidirectional_iterator_tag>
template<> struct prior_pair_iter<forward_iterator_tag>
{
template< typename I1, typename I2 > struct result_
template< typename Iter1, typename Iter2 > struct apply
{
typedef bidirectional_iterator_tag category;
typedef typename mpl::next<I1>::type i1_;
typedef typename mpl::next<I2>::type i2_;
typedef pair_iter<i1_,i2_,category> next;
typedef typename mpl::prior<I1>::type k1_;
typedef typename mpl::prior<I2>::type k2_;
typedef pair_iter<k1_,k2_,category> prior;
typedef pair_iter<Iter1,Iter2,forward_iterator_tag> type;
};
};
template<>
struct pair_iter_ops<random_access_iterator_tag>
{
template< typename I1, typename I2 > struct result_
{
typedef random_access_iterator_tag category;
typedef typename mpl::next<I1>::type i1_;
typedef typename mpl::next<I2>::type i2_;
typedef pair_iter<i1_,i2_,category> next;
typedef typename mpl::prior<I1>::type k1_;
typedef typename mpl::prior<I2>::type k2_;
typedef pair_iter<k1_,k2_,category> prior;
template< typename Distance > struct BOOST_MPL_AUX_ITERATOR_ADVANCE
{
typedef typename advance<I1,Distance>::type iter1_;
typedef typename advance<I2,Distance>::type iter2_;
typedef pair_iter<iter1_,iter2_,category> type;
};
template< typename U > struct BOOST_MPL_AUX_ITERATOR_DISTANCE
: distance<typename U::first,I1>
{
};
};
};
#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template< typename I1, typename I2, typename Category >
struct pair_iter
#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
: aux::msvc_eti_base< pair_iter_ops<Category>
::template result_<I1,I2> >::type
#endif
}
template<
typename Iter1
, typename Iter2
, typename Category
>
struct pair_iter
{
typedef aux::pair_iter_tag tag;
typedef Category category;
typedef Iter1 first;
typedef Iter2 second;
#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
typedef pair<
typename deref<Iter1>::type
, typename deref<Iter2>::type
> type;
typedef typename mpl::next<Iter1>::type i1_;
typedef typename mpl::next<Iter2>::type i2_;
typedef pair_iter<i1_,i2_,Category> next;
typedef apply_wrap2< aux::prior_pair_iter<Category>,Iter1,Iter2 >::type prior;
#endif
};
#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
template< typename I1, typename I2, typename C >
struct deref< pair_iter<I1,I2,C> >
template< typename Iter1, typename Iter2, typename C >
struct deref< pair_iter<Iter1,Iter2,C> >
{
typedef pair< typename deref<I1>::type, typename deref<I2>::type > type;
typedef pair<
typename deref<Iter1>::type
, typename deref<Iter2>::type
> type;
};
template< typename I1, typename I2, typename C >
struct next< pair_iter<I1,I2,C> >
template< typename Iter1, typename Iter2, typename C >
struct next< pair_iter<Iter1,Iter2,C> >
{
typedef typename mpl::next<I1>::type i1_;
typedef typename mpl::next<I2>::type i2_;
typedef typename mpl::next<Iter1>::type i1_;
typedef typename mpl::next<Iter2>::type i2_;
typedef pair_iter<i1_,i2_,C> type;
};
template< typename I1, typename I2, typename C >
struct prior< pair_iter<I1,I2,C> >
template< typename Iter1, typename Iter2, typename C >
struct prior< pair_iter<Iter1,Iter2,C> >
{
typedef typename mpl::prior<I1>::type i1_;
typedef typename mpl::prior<I2>::type i2_;
typedef typename mpl::prior<Iter1>::type i1_;
typedef typename mpl::prior<Iter2>::type i2_;
typedef pair_iter<i1_,i2_,C> type;
};
template< typename I1, typename I2, typename C, typename Distance >
struct advance< pair_iter<I1,I2,C>,Distance>
{
typedef typename mpl::advance<I1,Distance>::type iter1_;
typedef typename mpl::advance<I2,Distance>::type iter2_;
typedef pair_iter<iter1_,iter2_,C> type;
};
template< typename I1, typename I2, typename K1, typename K2, typename C >
struct distance< pair_iter<I1,I2,C>, pair_iter<K1,K2,C> >
: mpl::distance<K1,I1>
{
};
#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template<> struct advance_impl<aux::pair_iter_tag>
{
template< typename Iter, typename D > struct apply
{
typedef typename mpl::advance< typename Iter::first,D >::type i1_;
typedef typename mpl::advance< typename Iter::second,D >::type i2_;
typedef pair_iter<i1_,i2_,typename Iter::category> type;
};
};
template<> struct distance_impl<aux::pair_iter_tag>
{
template< typename Iter1, typename Iter2 > struct apply
{
// agurt, 10/nov/04: MSVC 6.5 ICE-s on forwarding
typedef typename mpl::distance<
typename first<Iter1>::type
, typename first<Iter2>::type
>::type type;
};
};
template<
typename BOOST_MPL_AUX_NA_PARAM(Sequence1)
, typename BOOST_MPL_AUX_NA_PARAM(Sequence2)

View File

@@ -3,6 +3,7 @@
#define BOOST_MPL_PARTITION_HPP_INCLUDED
// Copyright Eric Friedman 2002-2003
// Copyright Aleksey Gurtovoy 2004
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -14,32 +15,38 @@
// $Date$
// $Revision$
#include <boost/mpl/aux_/partition_op.hpp>
#include <boost/mpl/clear.hpp>
#include <boost/mpl/iter_fold.hpp>
#include <boost/mpl/pair.hpp>
#include <boost/mpl/aux_/na_spec.hpp>
#include <boost/mpl/aux_/lambda_support.hpp>
#include <boost/mpl/stable_partition.hpp>
#include <boost/mpl/aux_/inserter_algorithm.hpp>
namespace boost { namespace mpl {
namespace aux {
template <
typename BOOST_MPL_AUX_NA_PARAM(Sequence)
, typename BOOST_MPL_AUX_NA_PARAM(Predicate)
typename Sequence
, typename Pred
, typename In1
, typename In2
>
struct partition
struct partition_impl
: stable_partition_impl<Sequence,Pred,In1,In2>
{
typedef typename clear<Sequence>::type cleared_;
typedef typename iter_fold<
Sequence
, pair< cleared_,cleared_ >
, aux::partition_op<Predicate>
>::type type;
BOOST_MPL_AUX_LAMBDA_SUPPORT(2,partition,(Sequence,Predicate))
};
BOOST_MPL_AUX_NA_SPEC(2, partition)
template <
typename Sequence
, typename Pred
, typename In1
, typename In2
>
struct reverse_partition_impl
: reverse_stable_partition_impl<Sequence,Pred,In1,In2>
{
};
} // namespace aux
BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(4, partition)
}}

View File

@@ -2,7 +2,7 @@
#ifndef BOOST_MPL_RANGE_C_HPP_INCLUDED
#define BOOST_MPL_RANGE_C_HPP_INCLUDED
// Copyright Aleksey Gurtovoy 2000-2002
// Copyright Aleksey Gurtovoy 2000-2004
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -14,7 +14,6 @@
// $Date$
// $Revision$
#include <boost/mpl/integral_c.hpp>
#include <boost/mpl/aux_/range_c/front.hpp>
#include <boost/mpl/aux_/range_c/back.hpp>
@@ -34,13 +33,14 @@ template<
struct range_c
{
typedef aux::half_open_range_tag tag;
typedef T value_type;
typedef range_c type;
typedef integral_c<T,Start> start;
typedef integral_c<T,Finish> finish;
typedef rc_iter<start> begin;
typedef rc_iter<finish> end;
typedef r_iter<start> begin;
typedef r_iter<finish> end;
};
}}

View File

@@ -18,24 +18,37 @@
#include <boost/mpl/replace_if.hpp>
#include <boost/mpl/same_as.hpp>
#include <boost/mpl/aux_/common_name_wknd.hpp>
#include <boost/mpl/aux_/na_spec.hpp>
#include <boost/mpl/aux_/inserter_algorithm.hpp>
namespace boost { namespace mpl {
BOOST_MPL_AUX_COMMON_NAME_WKND(replace)
namespace aux {
template<
typename BOOST_MPL_AUX_NA_PARAM(Sequence)
, typename BOOST_MPL_AUX_NA_PARAM(OldType)
, typename BOOST_MPL_AUX_NA_PARAM(NewType)
typename Sequence
, typename OldType
, typename NewType
, typename Inserter
>
struct replace
: replace_if< Sequence, same_as<OldType>, NewType >
struct replace_impl
: replace_if_impl< Sequence, same_as<OldType>, NewType, Inserter >
{
};
BOOST_MPL_AUX_NA_SPEC(3, replace)
template<
typename Sequence
, typename OldType
, typename NewType
, typename Inserter
>
struct reverse_replace_impl
: reverse_replace_if_impl< Sequence, same_as<OldType>, NewType, Inserter >
{
};
} // namespace aux
BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(4, replace)
}}

View File

@@ -19,14 +19,11 @@
#include <boost/mpl/transform.hpp>
#include <boost/mpl/apply.hpp>
#include <boost/mpl/if.hpp>
#include <boost/mpl/aux_/common_name_wknd.hpp>
#include <boost/mpl/aux_/na_spec.hpp>
#include <boost/mpl/aux_/inserter_algorithm.hpp>
#include <boost/mpl/aux_/config/forwarding.hpp>
namespace boost { namespace mpl {
BOOST_MPL_AUX_COMMON_NAME_WKND(replace_if)
namespace aux {
template< typename Predicate, typename T >
@@ -51,16 +48,15 @@ struct replace_if_op
};
};
} // namespace aux
template<
typename BOOST_MPL_AUX_NA_PARAM(Sequence)
, typename BOOST_MPL_AUX_NA_PARAM(Predicate)
, typename BOOST_MPL_AUX_NA_PARAM(T)
, typename BOOST_MPL_AUX_NA_PARAM(Inserter)
typename Sequence
, typename Predicate
, typename T
, typename Inserter
>
struct replace_if
: transform1<
struct replace_if_impl
: transform1_impl<
Sequence
, protect< aux::replace_if_op<Predicate,T> >
, Inserter
@@ -68,7 +64,24 @@ struct replace_if
{
};
BOOST_MPL_AUX_NA_SPEC(3, replace_if)
template<
typename Sequence
, typename Predicate
, typename T
, typename Inserter
>
struct reverse_replace_if_impl
: reverse_transform1_impl<
Sequence
, protect< aux::replace_if_op<Predicate,T> >
, Inserter
>
{
};
} // namespace aux
BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(4, replace_if)
}}

View File

@@ -0,0 +1,48 @@
// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
#if defined(BOOST_PP_IS_ITERATING)
// Copyright Aleksey Gurtovoy 2000-2004
//
// 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)
//
// See http://www.boost.org/libs/mpl for documentation.
// $Source$
// $Date$
// $Revision$
#include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/preprocessor/repetition/enum_trailing_params.hpp>
#include <boost/preprocessor/dec.hpp>
#include <boost/preprocessor/cat.hpp>
#define i_ BOOST_PP_FRAME_ITERATION(1)
# define AUX778076_SET_C_TAIL(set, i_, T, C) \
BOOST_PP_CAT(BOOST_PP_CAT(set,i_),_c)< \
T BOOST_PP_ENUM_TRAILING_PARAMS(i_, C) \
> \
/**/
template<
typename T
, BOOST_PP_ENUM_PARAMS(i_, T C)
>
struct BOOST_PP_CAT(BOOST_PP_CAT(set,i_),_c)
: s_item<
integral_c<T,BOOST_PP_CAT(C,BOOST_PP_DEC(i_))>
, AUX778076_SET_C_TAIL(set,BOOST_PP_DEC(i_), T, C)
>
{
typedef BOOST_PP_CAT(BOOST_PP_CAT(set,i_),_c) type;
};
# undef AUX778076_SET_C_TAIL
#undef i_
#endif // BOOST_PP_IS_ITERATING

View File

@@ -0,0 +1,32 @@
#ifndef BOOST_MPL_SET_SET0_C_HPP_INCLUDED
#define BOOST_MPL_SET_SET0_C_HPP_INCLUDED
// Copyright Aleksey Gurtovoy 2003-2004
// Copyright David Abrahams 2003-2004
//
// 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)
//
// See http://www.boost.org/libs/mpl for documentation.
// $Source$
// $Date$
// $Revision$
#include <boost/mpl/set/set0.hpp>
#include <boost/mpl/integral_c.hpp>
namespace boost { namespace mpl {
template< typename T > struct set0_c
: set0<>
{
typedef set0_c type;
typedef T value_type;
};
}}
#endif // BOOST_MPL_SET_SET0_C_HPP_INCLUDED

View File

@@ -0,0 +1,45 @@
#ifndef BOOST_MPL_SET_SET10_C_HPP_INCLUDED
#define BOOST_MPL_SET_SET10_C_HPP_INCLUDED
// Copyright Aleksey Gurtovoy 2000-2004
// Copyright David Abrahams 2003-2004
//
// 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)
//
// See http://www.boost.org/libs/mpl for documentation.
// $Source$
// $Date$
// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/set/set0_c.hpp>
# include <boost/mpl/set/set10.hpp>
#endif
#include <boost/mpl/aux_/config/use_preprocessed.hpp>
#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
&& !defined(BOOST_MPL_PREPROCESSING_MODE)
# define BOOST_MPL_PREPROCESSED_HEADER set10_c.hpp
# include <boost/mpl/set/aux_/include_preprocessed.hpp>
#else
# include <boost/preprocessor/iterate.hpp>
namespace boost { namespace mpl {
# define BOOST_PP_ITERATION_PARAMS_1 \
(3,(1, 10, <boost/mpl/set/aux_/numbered_c.hpp>))
# include BOOST_PP_ITERATE()
}}
#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
#endif // BOOST_MPL_SET_SET10_C_HPP_INCLUDED

View File

@@ -0,0 +1,45 @@
#ifndef BOOST_MPL_SET_SET20_C_HPP_INCLUDED
#define BOOST_MPL_SET_SET20_C_HPP_INCLUDED
// Copyright Aleksey Gurtovoy 2000-2004
// Copyright David Abrahams 2003-2004
//
// 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)
//
// See http://www.boost.org/libs/mpl for documentation.
// $Source$
// $Date$
// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/set/set10_c.hpp>
# include <boost/mpl/set/set20.hpp>
#endif
#include <boost/mpl/aux_/config/use_preprocessed.hpp>
#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
&& !defined(BOOST_MPL_PREPROCESSING_MODE)
# define BOOST_MPL_PREPROCESSED_HEADER set20_c.hpp
# include <boost/mpl/set/aux_/include_preprocessed.hpp>
#else
# include <boost/preprocessor/iterate.hpp>
namespace boost { namespace mpl {
# define BOOST_PP_ITERATION_PARAMS_1 \
(3,(11, 20, <boost/mpl/set/aux_/numbered_c.hpp>))
# include BOOST_PP_ITERATE()
}}
#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
#endif // BOOST_MPL_SET_SET20_C_HPP_INCLUDED

View File

@@ -0,0 +1,45 @@
#ifndef BOOST_MPL_SET_SET30_C_HPP_INCLUDED
#define BOOST_MPL_SET_SET30_C_HPP_INCLUDED
// Copyright Aleksey Gurtovoy 2000-2004
// Copyright David Abrahams 2003-2004
//
// 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)
//
// See http://www.boost.org/libs/mpl for documentation.
// $Source$
// $Date$
// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/set/set20_c.hpp>
# include <boost/mpl/set/set30.hpp>
#endif
#include <boost/mpl/aux_/config/use_preprocessed.hpp>
#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
&& !defined(BOOST_MPL_PREPROCESSING_MODE)
# define BOOST_MPL_PREPROCESSED_HEADER set30_c.hpp
# include <boost/mpl/set/aux_/include_preprocessed.hpp>
#else
# include <boost/preprocessor/iterate.hpp>
namespace boost { namespace mpl {
# define BOOST_PP_ITERATION_PARAMS_1 \
(3,(21, 30, <boost/mpl/set/aux_/numbered_c.hpp>))
# include BOOST_PP_ITERATE()
}}
#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
#endif // BOOST_MPL_SET_SET30_C_HPP_INCLUDED

View File

@@ -0,0 +1,45 @@
#ifndef BOOST_MPL_SET_SET40_C_HPP_INCLUDED
#define BOOST_MPL_SET_SET40_C_HPP_INCLUDED
// Copyright Aleksey Gurtovoy 2000-2004
// Copyright David Abrahams 2003-2004
//
// 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)
//
// See http://www.boost.org/libs/mpl for documentation.
// $Source$
// $Date$
// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/set/set30_c.hpp>
# include <boost/mpl/set/set40.hpp>
#endif
#include <boost/mpl/aux_/config/use_preprocessed.hpp>
#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
&& !defined(BOOST_MPL_PREPROCESSING_MODE)
# define BOOST_MPL_PREPROCESSED_HEADER set40_c.hpp
# include <boost/mpl/set/aux_/include_preprocessed.hpp>
#else
# include <boost/preprocessor/iterate.hpp>
namespace boost { namespace mpl {
# define BOOST_PP_ITERATION_PARAMS_1 \
(3,(31, 40, <boost/mpl/set/aux_/numbered_c.hpp>))
# include BOOST_PP_ITERATE()
}}
#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
#endif // BOOST_MPL_SET_SET40_C_HPP_INCLUDED

View File

@@ -0,0 +1,45 @@
#ifndef BOOST_MPL_SET_SET50_C_HPP_INCLUDED
#define BOOST_MPL_SET_SET50_C_HPP_INCLUDED
// Copyright Aleksey Gurtovoy 2000-2004
// Copyright David Abrahams 2003-2004
//
// 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)
//
// See http://www.boost.org/libs/mpl for documentation.
// $Source$
// $Date$
// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/set/set40_c.hpp>
# include <boost/mpl/set/set50.hpp>
#endif
#include <boost/mpl/aux_/config/use_preprocessed.hpp>
#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
&& !defined(BOOST_MPL_PREPROCESSING_MODE)
# define BOOST_MPL_PREPROCESSED_HEADER set50_c.hpp
# include <boost/mpl/set/aux_/include_preprocessed.hpp>
#else
# include <boost/preprocessor/iterate.hpp>
namespace boost { namespace mpl {
# define BOOST_PP_ITERATION_PARAMS_1 \
(3,(41, 50, <boost/mpl/set/aux_/numbered_c.hpp>))
# include BOOST_PP_ITERATE()
}}
#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
#endif // BOOST_MPL_SET_SET50_C_HPP_INCLUDED

View File

@@ -0,0 +1,60 @@
#ifndef BOOST_MPL_SET_C_HPP_INCLUDED
#define BOOST_MPL_SET_C_HPP_INCLUDED
// Copyright Aleksey Gurtovoy 2000-2004
//
// 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)
//
// See http://www.boost.org/libs/mpl for documentation.
// $Source$
// $Date$
// $Revision$
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
# include <boost/mpl/limits/set.hpp>
# include <boost/mpl/aux_/nttp_decl.hpp>
# include <boost/mpl/aux_/config/preprocessor.hpp>
# include <boost/preprocessor/inc.hpp>
# include <boost/preprocessor/cat.hpp>
# include <boost/preprocessor/stringize.hpp>
#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)
# define AUX778076_SET_C_HEADER \
BOOST_PP_CAT(BOOST_PP_CAT(set,BOOST_MPL_LIMIT_SET_SIZE),_c).hpp \
/**/
#else
# define AUX778076_SET_C_HEADER \
BOOST_PP_CAT(BOOST_PP_CAT(set,BOOST_MPL_LIMIT_SET_SIZE),_c)##.hpp \
/**/
#endif
# include BOOST_PP_STRINGIZE(boost/mpl/set/AUX778076_SET_C_HEADER)
# undef AUX778076_SET_C_HEADER
# include <climits>
#endif
#include <boost/mpl/aux_/config/use_preprocessed.hpp>
#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
&& !defined(BOOST_MPL_PREPROCESSING_MODE)
# define BOOST_MPL_PREPROCESSED_HEADER set_c.hpp
# include <boost/mpl/aux_/include_preprocessed.hpp>
#else
# include <boost/mpl/limits/set.hpp>
# define AUX778076_SEQUENCE_NAME set_c
# define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_SET_SIZE
# define AUX778076_SEQUENCE_NAME_N(n) BOOST_PP_CAT(BOOST_PP_CAT(set,n),_c)
# define AUX778076_SEQUENCE_INTEGRAL_WRAPPER
# include <boost/mpl/aux_/sequence_wrapper.hpp>
#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
#endif // BOOST_MPL_SET_C_HPP_INCLUDED

View File

@@ -25,8 +25,8 @@ template<
>
struct single_view
: iterator_range<
aux::single_element_iter<T,0>
, aux::single_element_iter<T,1>
aux::sel_iter<T,0>
, aux::sel_iter<T,1>
>
{
};

View File

@@ -15,27 +15,12 @@
// $Date$
// $Revision$
#include <boost/mpl/sort_fwd.hpp>
#include <boost/mpl/less.hpp>
#include <boost/mpl/sequence_tag.hpp>
#include <boost/mpl/aux_/sort_impl.hpp>
#include <boost/mpl/aux_/na_spec.hpp>
#include <boost/mpl/aux_/lambda_support.hpp>
#include <boost/mpl/aux_/inserter_algorithm.hpp>
namespace boost { namespace mpl {
template <
typename BOOST_MPL_AUX_NA_PARAM(Sequence)
, typename Predicate = less<_,_>
>
struct sort
: sort_impl< typename sequence_tag<Sequence>::type >
::template apply< Sequence,Predicate >
{
BOOST_MPL_AUX_LAMBDA_SUPPORT(2,sort,(Sequence,Predicate))
};
BOOST_MPL_AUX_NA_SPEC(1, sort)
BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(3, sort)
}}

View File

@@ -1,29 +0,0 @@
#ifndef BOOST_MPL_SORT_FWD_HPP_INCLUDED
#define BOOST_MPL_SORT_FWD_HPP_INCLUDED
// Copyright Eric Friedman 2002-2003
// Copyright Aleksey Gurtovoy 2004
//
// 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)
//
// See http://www.boost.org/libs/mpl for documentation.
// $Source$
// $Date$
// $Revision$
#include <boost/mpl/aux_/common_name_wknd.hpp>
namespace boost { namespace mpl {
BOOST_MPL_AUX_COMMON_NAME_WKND(sort)
template< typename Tag > struct sort_impl;
template< typename Sequence, typename Predicate > struct sort;
}}
#endif // BOOST_MPL_SORT_FWD_HPP_INCLUDED

View File

@@ -3,6 +3,7 @@
#define BOOST_MPL_STABLE_PARTITION_HPP_INCLUDED
// Copyright Eric Friedman 2002-2003
// Copyright Aleksey Gurtovoy 2004
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
@@ -14,32 +15,60 @@
// $Date$
// $Revision$
#include <boost/mpl/fold.hpp>
#include <boost/mpl/reverse_fold.hpp>
#include <boost/mpl/protect.hpp>
#include <boost/mpl/aux_/partition_op.hpp>
#include <boost/mpl/clear.hpp>
#include <boost/mpl/reverse_iter_fold.hpp>
#include <boost/mpl/pair.hpp>
#include <boost/mpl/aux_/na_spec.hpp>
#include <boost/mpl/aux_/lambda_support.hpp>
#include <boost/mpl/aux_/inserter_algorithm.hpp>
#include <boost/mpl/aux_/na.hpp>
namespace boost { namespace mpl {
namespace aux {
template <
typename BOOST_MPL_AUX_NA_PARAM(Sequence)
, typename BOOST_MPL_AUX_NA_PARAM(Predicate)
typename Sequence
, typename Pred
, typename In
, typename In2
, typename In1 = typename if_na<In,In2>::type
>
struct stable_partition
{
typedef typename clear<Sequence>::type cleared_;
typedef typename reverse_iter_fold<
struct stable_partition_impl
: fold<
Sequence
, pair< cleared_,cleared_ >
, aux::partition_op<Predicate>
>::type type;
BOOST_MPL_AUX_LAMBDA_SUPPORT(2,stable_partition,(Sequence,Predicate))
, pair< typename In1::state, typename In2::state >
, protect< partition_op<
Pred
, typename In1::operation
, typename In2::operation
> >
>
{
};
BOOST_MPL_AUX_NA_SPEC(2, stable_partition)
template <
typename Sequence
, typename Pred
, typename In
, typename In2
, typename In1 = typename if_na<In,In2>::type
>
struct reverse_stable_partition_impl
: reverse_fold<
Sequence
, pair< typename In1::state, typename In2::state >
, protect< partition_op<
Pred
, typename In1::operation
, typename In2::operation
> >
>
{
};
} // namespace aux
BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(4, stable_partition)
}}

View File

@@ -24,17 +24,17 @@
# include <boost/preprocessor/stringize.hpp>
#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)
# define AUX778076_HEADER \
# define AUX778076_VECTOR_HEADER \
BOOST_PP_CAT(vector, BOOST_MPL_LIMIT_VECTOR_SIZE).hpp \
/**/
#else
# define AUX778076_HEADER \
# define AUX778076_VECTOR_HEADER \
BOOST_PP_CAT(vector, BOOST_MPL_LIMIT_VECTOR_SIZE)##.hpp \
/**/
#endif
# include BOOST_PP_STRINGIZE(boost/mpl/vector/AUX778076_HEADER)
# undef AUX778076_HEADER
# include BOOST_PP_STRINGIZE(boost/mpl/vector/AUX778076_VECTOR_HEADER)
# undef AUX778076_VECTOR_HEADER
#endif
#include <boost/mpl/aux_/config/use_preprocessed.hpp>

View File

@@ -21,28 +21,28 @@
#include <boost/preprocessor/stringize.hpp>
#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
# define AUX_VECTOR_INCLIDE_DIR typeof_based
# define AUX778076_INCLUDE_DIR typeof_based
#elif defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
|| defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC)
# define AUX_VECTOR_INCLIDE_DIR no_ctps
# define AUX778076_INCLUDE_DIR no_ctps
#else
# define AUX_VECTOR_INCLIDE_DIR plain
# define AUX778076_INCLUDE_DIR plain
#endif
#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)
# define AUX_PREPROCESSED_HEADER \
AUX_VECTOR_INCLIDE_DIR/BOOST_MPL_PREPROCESSED_HEADER \
# define AUX778076_HEADER \
AUX778076_INCLUDE_DIR/BOOST_MPL_PREPROCESSED_HEADER \
/**/
#else
# define AUX_PREPROCESSED_HEADER \
BOOST_PP_CAT(AUX_VECTOR_INCLIDE_DIR,/)##BOOST_MPL_PREPROCESSED_HEADER \
# define AUX778076_HEADER \
BOOST_PP_CAT(AUX778076_INCLUDE_DIR,/)##BOOST_MPL_PREPROCESSED_HEADER \
/**/
#endif
# include BOOST_PP_STRINGIZE(boost/mpl/vector/aux_/preprocessed/AUX_PREPROCESSED_HEADER)
# include BOOST_PP_STRINGIZE(boost/mpl/vector/aux_/preprocessed/AUX778076_HEADER)
# undef AUX_PREPROCESSED_HEADER
# undef AUX_VECTOR_INCLIDE_DIR
# undef AUX778076_HEADER
# undef AUX778076_INCLUDE_DIR
#undef BOOST_MPL_PREPROCESSED_HEADER

View File

@@ -22,7 +22,6 @@
#include <boost/mpl/distance_fwd.hpp>
#include <boost/mpl/next.hpp>
#include <boost/mpl/prior.hpp>
#include <boost/mpl/aux_/iterator_names.hpp>
#include <boost/mpl/aux_/nttp_decl.hpp>
#include <boost/mpl/aux_/value_wknd.hpp>
#include <boost/mpl/aux_/config/ctps.hpp>
@@ -114,6 +113,15 @@ template<> struct advance_impl<aux::v_iter_tag>
};
};
template<> struct distance_impl<aux::v_iter_tag>
{
template< typename Iter1, typename Iter2 > struct apply
{
enum { pos1_ = Iter1::pos_, pos2_ = Iter2::pos_ };
typedef long_<( pos2_ - pos1_ )> type;
BOOST_STATIC_CONSTANT(long, value = ( pos2_ - pos1_ ));
};
};
#endif

View File

@@ -44,6 +44,7 @@ struct BOOST_PP_CAT(BOOST_PP_CAT(vector,i_),_c)
>
{
typedef BOOST_PP_CAT(BOOST_PP_CAT(vector,i_),_c) type;
typedef T value_type;
};
#endif
@@ -63,6 +64,8 @@ template<
struct BOOST_PP_CAT(BOOST_PP_CAT(vector,i_),_c)
: BOOST_PP_CAT(vector,i_)< BOOST_PP_REPEAT(i_,AUX778076_VECTOR_C_PARAM_FUNC,C) >
{
typedef BOOST_PP_CAT(BOOST_PP_CAT(vector,i_),_c) type;
typedef T value_type;
};
# undef AUX778076_VECTOR_C_PARAM_FUNC

View File

@@ -15,6 +15,7 @@
// $Revision$
#include <boost/mpl/aux_/config/typeof.hpp>
#include <boost/mpl/aux_/nttp_decl.hpp>
namespace boost { namespace mpl { namespace aux {
@@ -23,7 +24,7 @@ struct v_iter_tag;
#if defined(BOOST_MPL_CFG_TYPEOF_BASED_SEQUENCES)
struct vector_tag;
#else
template< long N > struct vector_tag;
template< BOOST_MPL_AUX_NTTP_DECL(long, N) > struct vector_tag;
#endif
}}}

View File

@@ -15,6 +15,7 @@
// $Revision$
#include <boost/mpl/vector/vector0.hpp>
#include <boost/mpl/integral_c.hpp>
namespace boost { namespace mpl {
@@ -22,6 +23,7 @@ template< typename T > struct vector0_c
: vector0<>
{
typedef vector0_c type;
typedef T value_type;
};
}}

View File

@@ -24,17 +24,17 @@
# include <boost/preprocessor/stringize.hpp>
#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)
# define AUX778076_HEADER \
# define AUX778076_VECTOR_C_HEADER \
BOOST_PP_CAT(BOOST_PP_CAT(vector,BOOST_MPL_LIMIT_VECTOR_SIZE),_c).hpp \
/**/
#else
# define AUX778076_HEADER \
# define AUX778076_VECTOR_C_HEADER \
BOOST_PP_CAT(BOOST_PP_CAT(vector,BOOST_MPL_LIMIT_VECTOR_SIZE),_c)##.hpp \
/**/
#endif
# include BOOST_PP_STRINGIZE(boost/mpl/vector/AUX778076_HEADER)
# undef AUX778076_HEADER
# include BOOST_PP_STRINGIZE(boost/mpl/vector/AUX778076_VECTOR_C_HEADER)
# undef AUX778076_VECTOR_C_HEADER
# include <climits>
#endif