You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
1.7 KiB
75 lines
1.7 KiB
|
|
#ifndef BOOST_MPL_STABLE_PARTITION_HPP_INCLUDED |
|
#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 |
|
// http://www.boost.org/LICENSE_1_0.txt) |
|
// |
|
// See http://www.boost.org/libs/mpl for documentation. |
|
|
|
// $Id$ |
|
// $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/aux_/inserter_algorithm.hpp> |
|
#include <boost/mpl/aux_/na.hpp> |
|
|
|
namespace boost { namespace mpl { |
|
|
|
namespace aux { |
|
|
|
template < |
|
typename Sequence |
|
, typename Pred |
|
, typename In |
|
, typename In2 |
|
, typename In1 = typename if_na<In,In2>::type |
|
> |
|
struct stable_partition_impl |
|
: fold< |
|
Sequence |
|
, pair< typename In1::state, typename In2::state > |
|
, protect< partition_op< |
|
Pred |
|
, typename In1::operation |
|
, typename In2::operation |
|
> > |
|
> |
|
{ |
|
}; |
|
|
|
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) |
|
|
|
}} |
|
|
|
#endif // BOOST_MPL_STABLE_PARTITION_HPP_INCLUDED
|
|
|