1198 lines
		
	
	
		
			34 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			1198 lines
		
	
	
		
			34 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
// Copyright 2005 Daniel Wallin.
 | 
						|
// Copyright 2005 Joel de Guzman.
 | 
						|
// Copyright 2005 Dan Marsden.
 | 
						|
// Copyright 2015 John Fletcher.
 | 
						|
//
 | 
						|
// Use, modification and distribution is 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)
 | 
						|
//
 | 
						|
// Modeled after range_ex, Copyright 2004 Eric Niebler
 | 
						|
 | 
						|
#ifndef BOOST_PHOENIX_ALGORITHM_TRANSFORMATION_HPP
 | 
						|
#define BOOST_PHOENIX_ALGORITHM_TRANSFORMATION_HPP
 | 
						|
 | 
						|
#include <algorithm>
 | 
						|
#include <numeric>
 | 
						|
 | 
						|
#include <boost/phoenix/core/limits.hpp>
 | 
						|
#include <boost/phoenix/stl/algorithm/detail/has_sort.hpp>
 | 
						|
#include <boost/phoenix/stl/algorithm/detail/has_remove.hpp>
 | 
						|
#include <boost/phoenix/stl/algorithm/detail/has_remove_if.hpp>
 | 
						|
#include <boost/phoenix/stl/algorithm/detail/has_unique.hpp>
 | 
						|
#include <boost/phoenix/stl/algorithm/detail/has_reverse.hpp>
 | 
						|
#include <boost/phoenix/stl/algorithm/detail/has_sort.hpp>
 | 
						|
 | 
						|
#include <boost/phoenix/stl/algorithm/detail/begin.hpp>
 | 
						|
#include <boost/phoenix/stl/algorithm/detail/end.hpp>
 | 
						|
#include <boost/phoenix/stl/algorithm/detail/decay_array.hpp>
 | 
						|
 | 
						|
#include <boost/phoenix/function/adapt_callable.hpp>
 | 
						|
 | 
						|
//#include <boost/range/result_iterator.hpp> is deprecated
 | 
						|
#include <boost/range/iterator.hpp>
 | 
						|
#include <boost/range/difference_type.hpp>
 | 
						|
 | 
						|
#include <boost/mpl/if.hpp>
 | 
						|
 | 
						|
#include <boost/type_traits/is_void.hpp>
 | 
						|
 | 
						|
namespace boost { namespace phoenix { namespace impl
 | 
						|
{
 | 
						|
    struct swap
 | 
						|
    {
 | 
						|
        typedef void result_type;
 | 
						|
 | 
						|
        template <class A, class B>
 | 
						|
        void operator()(A& a, B& b) const
 | 
						|
        {
 | 
						|
            using std::swap;
 | 
						|
            swap(a, b);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct copy
 | 
						|
    {
 | 
						|
        template <typename Sig>
 | 
						|
        struct result;
 | 
						|
 | 
						|
        template<typename This, class R, class I>
 | 
						|
        struct result<This(R&, I)>
 | 
						|
            : detail::decay_array<I>
 | 
						|
        {};
 | 
						|
 | 
						|
        template<class R, class I>
 | 
						|
        typename detail::decay_array<I>::type
 | 
						|
        operator()(R& r, I i) const
 | 
						|
        {
 | 
						|
            return std::copy(detail::begin_(r), detail::end_(r), i);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct copy_backward
 | 
						|
    {
 | 
						|
        template <typename Sig>
 | 
						|
        struct result;
 | 
						|
 | 
						|
        template<typename This, class R, class I>
 | 
						|
        struct result<This(R&, I)>
 | 
						|
            : result<This(R&, I const &)>
 | 
						|
        {};
 | 
						|
 | 
						|
        template<typename This, class R, class I>
 | 
						|
        struct result<This(R&, I &)>
 | 
						|
        {
 | 
						|
            typedef I type;
 | 
						|
        };
 | 
						|
 | 
						|
        template<class R, class I>
 | 
						|
        I operator()(R& r, I & i) const
 | 
						|
        {
 | 
						|
            return std::copy_backward(detail::begin_(r), detail::end_(r), i);
 | 
						|
        }
 | 
						|
 | 
						|
        template<class R, class I>
 | 
						|
        I const operator()(R& r, I const & i) const
 | 
						|
        {
 | 
						|
            return std::copy_backward(detail::begin_(r), detail::end_(r), i);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct transform
 | 
						|
    {
 | 
						|
        template <typename Sig>
 | 
						|
        struct result;
 | 
						|
        
 | 
						|
        template<typename This, class R, class OutorI1, class ForOut>
 | 
						|
        struct result<This(R&, OutorI1, ForOut)>
 | 
						|
            : detail::decay_array<OutorI1>
 | 
						|
        {
 | 
						|
        };
 | 
						|
 | 
						|
        template<typename This, class R, class OutorI1, class ForOut, class BinF>
 | 
						|
        struct result<This(R&, OutorI1, ForOut, BinF)>
 | 
						|
            : detail::decay_array<ForOut>
 | 
						|
        {
 | 
						|
        };
 | 
						|
 | 
						|
        template<class R, class O, class F>
 | 
						|
        typename result<transform(R&,O,F)>::type
 | 
						|
        operator()(R& r, O o, F f) const
 | 
						|
        {
 | 
						|
            return std::transform(detail::begin_(r), detail::end_(r), o, f);
 | 
						|
        }
 | 
						|
 | 
						|
        template<class R, class I, class O, class F>
 | 
						|
        typename result<transform(R&,I,O,F)>::type
 | 
						|
        operator()(R& r, I i, O o, F f) const
 | 
						|
        {
 | 
						|
            return std::transform(detail::begin_(r), detail::end_(r), i, o, f);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct replace
 | 
						|
    {
 | 
						|
        typedef void result_type;
 | 
						|
 | 
						|
        template<class R, class T>
 | 
						|
        void operator()(R& r, T const& what, T const& with) const
 | 
						|
        {
 | 
						|
            std::replace(detail::begin_(r), detail::end_(r), what, with);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct replace_if
 | 
						|
    {
 | 
						|
        typedef void result_type;
 | 
						|
 | 
						|
        template<class R, class P, class T>
 | 
						|
        void operator()(R& r, P p, T const& with) const
 | 
						|
        {
 | 
						|
            std::replace_if(detail::begin_(r), detail::end_(r), p, with);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct replace_copy
 | 
						|
    {
 | 
						|
        template <typename Sig>
 | 
						|
        struct result;
 | 
						|
 | 
						|
        template<typename This, class R, class O, class T, class T2>
 | 
						|
        struct result<This(R&, O, T&, T2&)>
 | 
						|
            : detail::decay_array<O>
 | 
						|
        {};
 | 
						|
 | 
						|
        template<class R, class O, class T>
 | 
						|
        typename detail::decay_array<O>::type 
 | 
						|
        operator()(R& r, O o, T const& what, T const& with) const
 | 
						|
        {
 | 
						|
            return std::replace_copy(detail::begin_(r), detail::end_(r), o, what, with);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct replace_copy_if
 | 
						|
    {
 | 
						|
        template <typename Sig>
 | 
						|
        struct result;
 | 
						|
 | 
						|
        template<typename This, class R, class O, class P, class T>
 | 
						|
        struct result<This(R&, O, P, T&)>
 | 
						|
            : detail::decay_array<O>
 | 
						|
        {};
 | 
						|
 | 
						|
        template<class R, class O, class P, class T>
 | 
						|
        typename detail::decay_array<O>::type
 | 
						|
        operator()(R& r, O o, P p, T const& with) const
 | 
						|
        {
 | 
						|
            return std::replace_copy_if(detail::begin_(r), detail::end_(r), o, p, with);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct fill
 | 
						|
    {
 | 
						|
        typedef void result_type;
 | 
						|
 | 
						|
        template<class R, class T>
 | 
						|
        void operator()(R& r, T const& x) const
 | 
						|
        {
 | 
						|
            std::fill(detail::begin_(r), detail::end_(r), x);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct fill_n
 | 
						|
    {
 | 
						|
        typedef void result_type;
 | 
						|
 | 
						|
        template<class R, class N, class T>
 | 
						|
        void operator()(R& r, N n, T const& x) const
 | 
						|
        {
 | 
						|
            std::fill_n(detail::begin_(r), n, x);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct generate
 | 
						|
    {
 | 
						|
        typedef void result_type;
 | 
						|
 | 
						|
        template<class R, class G>
 | 
						|
        void operator()(R& r, G const & g) const
 | 
						|
        {
 | 
						|
            std::generate(detail::begin_(r), detail::end_(r), g);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct generate_n
 | 
						|
    {
 | 
						|
        typedef void result_type;
 | 
						|
 | 
						|
        template<class R, class N, class G>
 | 
						|
        void operator()(R& r, N n, G g) const
 | 
						|
        {
 | 
						|
            std::generate_n(detail::begin_(r), n, g);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct remove
 | 
						|
    {
 | 
						|
        template <typename Sig>
 | 
						|
        struct result;
 | 
						|
 | 
						|
        template<typename This, class R, class T>
 | 
						|
        struct result<This(R&, T&)>
 | 
						|
            : range_iterator<R>
 | 
						|
        {
 | 
						|
        };
 | 
						|
 | 
						|
        template<class R, class T>
 | 
						|
        typename range_iterator<R>::type
 | 
						|
        execute(R& r, T const& x, mpl::true_) const
 | 
						|
        {
 | 
						|
            r.remove(x);
 | 
						|
            return detail::end_(r);
 | 
						|
        }
 | 
						|
 | 
						|
        template<class R, class T>
 | 
						|
        typename range_iterator<R>::type
 | 
						|
        execute(R& r, T const& x, mpl::false_) const
 | 
						|
        {
 | 
						|
            return std::remove(detail::begin_(r), detail::end_(r), x);
 | 
						|
        }
 | 
						|
 | 
						|
        template<class R, class T>
 | 
						|
        typename range_iterator<R>::type
 | 
						|
        operator()(R& r, T const& x) const
 | 
						|
        {
 | 
						|
            return execute(r, x, has_remove<R>());
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct remove_if
 | 
						|
    {
 | 
						|
        template <typename Sig>
 | 
						|
        struct result;
 | 
						|
 | 
						|
        template <typename This, class R, class P>
 | 
						|
        struct result<This(R&,P)>
 | 
						|
            : range_iterator<R>
 | 
						|
        {
 | 
						|
        };
 | 
						|
 | 
						|
        template<class R, class P>
 | 
						|
        typename range_iterator<R>::type
 | 
						|
        execute(R& r, P p, mpl::true_) const
 | 
						|
        {
 | 
						|
            r.remove_if(p);
 | 
						|
            return detail::end_(r);
 | 
						|
        }
 | 
						|
 | 
						|
        template<class R, class P>
 | 
						|
        typename range_iterator<R>::type
 | 
						|
        execute(R& r, P p, mpl::false_) const
 | 
						|
        {
 | 
						|
            return std::remove_if(detail::begin_(r), detail::end_(r), p);
 | 
						|
        }
 | 
						|
 | 
						|
        template<class R, class P>
 | 
						|
        typename range_iterator<R>::type
 | 
						|
        operator()(R& r, P p) const
 | 
						|
        {
 | 
						|
            return execute(r, p, has_remove_if<R>());
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct remove_copy
 | 
						|
    {
 | 
						|
        template <typename Sig>
 | 
						|
        struct result;
 | 
						|
 | 
						|
        template<typename This, class R, class O, class T>
 | 
						|
        struct result<This(R&, O, T)>
 | 
						|
            : detail::decay_array<O>
 | 
						|
        {};
 | 
						|
 | 
						|
        template<class R, class O, class T>
 | 
						|
        typename detail::decay_array<O>::type
 | 
						|
        operator()(R& r, O o, T const& x) const
 | 
						|
        {
 | 
						|
            return std::remove_copy(detail::begin_(r), detail::end_(r), o, x);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct remove_copy_if
 | 
						|
    {
 | 
						|
        template <typename Sig>
 | 
						|
        struct result;
 | 
						|
 | 
						|
        template<typename This, class R, class O, class P>
 | 
						|
        struct result<This(R&, O, P)>
 | 
						|
            : detail::decay_array<O>
 | 
						|
        {};
 | 
						|
 | 
						|
        template<class R, class O, class P>
 | 
						|
        typename detail::decay_array<O>::type
 | 
						|
        operator()(R& r, O o, P p) const
 | 
						|
        {
 | 
						|
            return std::remove_copy_if(detail::begin_(r), detail::end_(r), o, p);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct unique
 | 
						|
    {
 | 
						|
        template <typename Sig>
 | 
						|
        struct result;
 | 
						|
 | 
						|
        template<typename This, class R>
 | 
						|
        struct result<This(R&)>
 | 
						|
            : range_iterator<R>
 | 
						|
        {};
 | 
						|
 | 
						|
        template<typename This, class R, class P>
 | 
						|
        struct result<This(R&, P)>
 | 
						|
            : range_iterator<R>
 | 
						|
        {};
 | 
						|
 | 
						|
        template<class R>
 | 
						|
        typename range_iterator<R>::type
 | 
						|
        execute(R& r, mpl::true_) const
 | 
						|
        {
 | 
						|
            r.unique();
 | 
						|
            return detail::end_(r);
 | 
						|
        }
 | 
						|
 | 
						|
        template<class R>
 | 
						|
        typename range_iterator<R>::type
 | 
						|
        execute(R& r, mpl::false_) const
 | 
						|
        {
 | 
						|
            return std::unique(detail::begin_(r), detail::end_(r));
 | 
						|
        }
 | 
						|
 | 
						|
        template<class R>
 | 
						|
        typename range_iterator<R>::type
 | 
						|
        operator()(R& r) const
 | 
						|
        {
 | 
						|
            return execute(r, has_unique<R>());
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        template<class R, class P>
 | 
						|
        typename range_iterator<R>::type
 | 
						|
        execute(R& r, P p, mpl::true_) const
 | 
						|
        {
 | 
						|
            r.unique(p);
 | 
						|
            return detail::end_(r);
 | 
						|
        }
 | 
						|
 | 
						|
        template<class R, class P>
 | 
						|
        typename range_iterator<R>::type
 | 
						|
        execute(R& r, P p, mpl::false_) const
 | 
						|
        {
 | 
						|
            return std::unique(detail::begin_(r), detail::end_(r), p);
 | 
						|
        }
 | 
						|
 | 
						|
        template<class R, class P>
 | 
						|
        typename range_iterator<R>::type
 | 
						|
        operator()(R& r, P p) const
 | 
						|
        {
 | 
						|
            return execute(r, p, has_unique<R>());
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct unique_copy
 | 
						|
    {
 | 
						|
        template <typename Sig>
 | 
						|
        struct result;
 | 
						|
 | 
						|
        template<typename This, class R, class O>
 | 
						|
        struct result<This(R&, O)>
 | 
						|
            : detail::decay_array<O>
 | 
						|
        {};
 | 
						|
 | 
						|
        template<typename This, class R, class O, class P>
 | 
						|
        struct result<This(R&, O, P)>
 | 
						|
            : detail::decay_array<O>
 | 
						|
        {};
 | 
						|
 | 
						|
        template<class R, class O>
 | 
						|
        typename detail::decay_array<O>::type operator()(R& r, O o) const
 | 
						|
        {
 | 
						|
            return std::unique_copy(
 | 
						|
                detail::begin_(r)
 | 
						|
                , detail::end_(r)
 | 
						|
                , o
 | 
						|
                );
 | 
						|
        }
 | 
						|
 | 
						|
        template<class R, class O, class P>
 | 
						|
        typename detail::decay_array<O>::type operator()(R& r, O o, P p) const
 | 
						|
        {
 | 
						|
            return std::unique_copy(
 | 
						|
                detail::begin_(r)
 | 
						|
                , detail::end_(r)
 | 
						|
                , o
 | 
						|
                , p
 | 
						|
                );
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct reverse
 | 
						|
    {
 | 
						|
        typedef void result_type;
 | 
						|
 | 
						|
        template<class R>
 | 
						|
        void execute(R& r, mpl::true_) const
 | 
						|
        {
 | 
						|
            r.reverse();
 | 
						|
        }
 | 
						|
 | 
						|
        template<class R>
 | 
						|
        void execute(R& r, mpl::false_) const
 | 
						|
        {
 | 
						|
            std::reverse(detail::begin_(r), detail::end_(r));
 | 
						|
        }
 | 
						|
 | 
						|
        template<class R>
 | 
						|
        void operator()(R& r) const
 | 
						|
        {
 | 
						|
            execute(r, has_reverse<R>());
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct reverse_copy
 | 
						|
    {
 | 
						|
        template <typename Sig>
 | 
						|
        struct result;
 | 
						|
 | 
						|
        template<typename This, class R, class O>
 | 
						|
        struct result<This(R&, O)>
 | 
						|
            : detail::decay_array<O>
 | 
						|
        {};
 | 
						|
 | 
						|
        template<class R, class O>
 | 
						|
        typename detail::decay_array<O>::type operator()(R& r, O o) const
 | 
						|
        {
 | 
						|
            return std::reverse_copy(
 | 
						|
                detail::begin_(r)
 | 
						|
                , detail::end_(r)
 | 
						|
                , o
 | 
						|
                );
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct rotate
 | 
						|
    {
 | 
						|
        typedef void result_type;
 | 
						|
 | 
						|
        template<class R, class M>
 | 
						|
        void operator()(R& r, M m) const
 | 
						|
        {
 | 
						|
            std::rotate(
 | 
						|
                detail::begin_(r)
 | 
						|
                , m
 | 
						|
                , detail::end_(r)
 | 
						|
                );
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct rotate_copy
 | 
						|
    {
 | 
						|
        template <typename Sig>
 | 
						|
        struct result;
 | 
						|
 | 
						|
        template<typename This, class R, class M, class O>
 | 
						|
        struct result<This(R&, M, O)>
 | 
						|
            : detail::decay_array<O>
 | 
						|
        {};
 | 
						|
 | 
						|
        template<class R, class M, class O>
 | 
						|
        typename detail::decay_array<O>::type operator()(R& r, M m, O o) const
 | 
						|
        {
 | 
						|
            return std::rotate_copy(
 | 
						|
                detail::begin_(r)
 | 
						|
                , m
 | 
						|
                , detail::end_(r)
 | 
						|
                , o
 | 
						|
                );
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct random_shuffle
 | 
						|
    {
 | 
						|
        typedef void result_type;
 | 
						|
 | 
						|
        template<class R>
 | 
						|
        void operator()(R& r) const
 | 
						|
        {
 | 
						|
            return std::random_shuffle(detail::begin_(r), detail::end_(r));
 | 
						|
        }
 | 
						|
 | 
						|
        template<class R, class G>
 | 
						|
        void operator()(R& r, G g) const
 | 
						|
        {
 | 
						|
            return std::random_shuffle(detail::begin_(r), detail::end_(r), g);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct partition
 | 
						|
    {
 | 
						|
        template <typename Sig>
 | 
						|
        struct result;
 | 
						|
 | 
						|
        template <typename This, class R, class P>
 | 
						|
        struct result<This(R&, P)>
 | 
						|
            : range_iterator<R>
 | 
						|
        {};
 | 
						|
 | 
						|
        template<class R, class P>
 | 
						|
        typename range_iterator<R>::type
 | 
						|
        operator()(R& r, P p) const
 | 
						|
        {
 | 
						|
            return std::partition(detail::begin_(r), detail::end_(r), p);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct stable_partition
 | 
						|
    {
 | 
						|
        template <typename Sig>
 | 
						|
        struct result;
 | 
						|
 | 
						|
        template <typename This, class R, class P>
 | 
						|
        struct result<This(R&, P)>
 | 
						|
            : range_iterator<R>
 | 
						|
        {};
 | 
						|
 | 
						|
        template<class R, class P>
 | 
						|
        typename range_iterator<R>::type
 | 
						|
        operator()(R& r, P p) const
 | 
						|
        {
 | 
						|
            return std::stable_partition(detail::begin_(r), detail::end_(r), p);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct sort
 | 
						|
    {
 | 
						|
        typedef void result_type;
 | 
						|
 | 
						|
        template<class R>
 | 
						|
        void execute(R& r, mpl::true_) const
 | 
						|
        {
 | 
						|
            r.sort();
 | 
						|
        }
 | 
						|
 | 
						|
        template<class R>
 | 
						|
        void execute(R& r, mpl::false_) const
 | 
						|
        {
 | 
						|
            std::sort(detail::begin_(r), detail::end_(r));
 | 
						|
        }
 | 
						|
 | 
						|
        template<class R>
 | 
						|
        void operator()(R& r) const
 | 
						|
        {
 | 
						|
            execute(r, has_sort<R>());
 | 
						|
        }
 | 
						|
 | 
						|
        template<class R, class C>
 | 
						|
        void execute(R& r, C c, mpl::true_) const
 | 
						|
        {
 | 
						|
            r.sort(c);
 | 
						|
        }
 | 
						|
 | 
						|
        template<class R, class C>
 | 
						|
        void execute(R& r, C c, mpl::false_) const
 | 
						|
        {
 | 
						|
            std::sort(detail::begin_(r), detail::end_(r), c);
 | 
						|
        }
 | 
						|
 | 
						|
        template<class R, class C>
 | 
						|
        void operator()(R& r, C c) const
 | 
						|
        {
 | 
						|
            execute(r, c, has_sort<R>());
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct stable_sort
 | 
						|
    {
 | 
						|
        typedef void result_type;
 | 
						|
 | 
						|
        template<class R>
 | 
						|
        void operator()(R& r) const
 | 
						|
        {
 | 
						|
            std::stable_sort(detail::begin_(r), detail::end_(r));
 | 
						|
        }
 | 
						|
 | 
						|
        template<class R, class C>
 | 
						|
        void operator()(R& r, C c) const
 | 
						|
        {
 | 
						|
            std::stable_sort(detail::begin_(r), detail::end_(r), c);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct partial_sort
 | 
						|
    {
 | 
						|
        typedef void result_type;
 | 
						|
 | 
						|
        template<class R, class M>
 | 
						|
        void operator()(R& r, M m) const
 | 
						|
        {
 | 
						|
            std::partial_sort(detail::begin_(r), m, detail::end_(r));
 | 
						|
        }
 | 
						|
 | 
						|
        template<class R, class M, class C>
 | 
						|
        void operator()(R& r, M m, C c) const
 | 
						|
        {
 | 
						|
            std::partial_sort(detail::begin_(r), m, detail::end_(r), c);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct partial_sort_copy
 | 
						|
    {
 | 
						|
        template <typename Sig>
 | 
						|
        struct result;
 | 
						|
        
 | 
						|
        template <typename This, class R1, class R2>
 | 
						|
        struct result<This(R1&, R2&)>
 | 
						|
            : range_iterator<R2>
 | 
						|
        {};
 | 
						|
 | 
						|
        template <typename This, class R1, class R2, class C>
 | 
						|
        struct result<This(R1&, R2&, C)>
 | 
						|
            : range_iterator<R2>
 | 
						|
        {};
 | 
						|
 | 
						|
        template <class R1, class R2>
 | 
						|
        typename range_iterator<R2>::type
 | 
						|
        operator()(R1& r1, R2& r2) const
 | 
						|
        {
 | 
						|
            return std::partial_sort_copy(
 | 
						|
                detail::begin_(r1), detail::end_(r1)
 | 
						|
                , detail::begin_(r2), detail::end_(r2)
 | 
						|
                );
 | 
						|
        }
 | 
						|
 | 
						|
        template <class R1, class R2, class C>
 | 
						|
        typename range_iterator<R2>::type
 | 
						|
        operator()(R1& r1, R2& r2, C c) const
 | 
						|
        {
 | 
						|
            return std::partial_sort_copy(
 | 
						|
                detail::begin_(r1), detail::end_(r1)
 | 
						|
                , detail::begin_(r2), detail::end_(r2)
 | 
						|
                , c
 | 
						|
                );
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct nth_element
 | 
						|
    {
 | 
						|
        typedef void result_type;
 | 
						|
 | 
						|
        template<class R, class N>
 | 
						|
        void operator()(R& r, N n) const
 | 
						|
        {
 | 
						|
            return std::nth_element(detail::begin_(r), n, detail::end_(r));
 | 
						|
        }
 | 
						|
 | 
						|
        template<class R, class N, class C>
 | 
						|
        void operator()(R& r, N n, C c) const
 | 
						|
        {
 | 
						|
            return std::nth_element(detail::begin_(r), n, detail::end_(r), c);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct merge 
 | 
						|
    {
 | 
						|
        template <typename Sig>
 | 
						|
        struct result;
 | 
						|
 | 
						|
        template<typename This, class R1, class R2, class O>
 | 
						|
        struct result<This(R1&, R2&, O)>
 | 
						|
            : detail::decay_array<O>
 | 
						|
        {};
 | 
						|
 | 
						|
        template<typename This, class R1, class R2, class O, class C>
 | 
						|
        struct result<This(R1&, R2&, O, C)>
 | 
						|
            : detail::decay_array<O>
 | 
						|
        {};
 | 
						|
 | 
						|
        template<class R1, class R2, class O>
 | 
						|
        typename detail::decay_array<O>::type operator()(R1& r1, R2& r2, O o) const
 | 
						|
        {
 | 
						|
            return std::merge(
 | 
						|
                detail::begin_(r1), detail::end_(r1)
 | 
						|
                , detail::begin_(r2), detail::end_(r2)
 | 
						|
                , o
 | 
						|
                );
 | 
						|
        }
 | 
						|
 | 
						|
        template<class R1, class R2, class O, class C>
 | 
						|
        typename detail::decay_array<O>::type operator()(R1& r1, R2& r2, O o, C c) const
 | 
						|
        {
 | 
						|
            return std::merge(
 | 
						|
                detail::begin_(r1), detail::end_(r1)
 | 
						|
                , detail::begin_(r2), detail::end_(r2)
 | 
						|
                , o
 | 
						|
                , c
 | 
						|
                );
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct inplace_merge 
 | 
						|
    {
 | 
						|
        typedef void result_type;
 | 
						|
 | 
						|
        template<class R, class M>
 | 
						|
        void operator()(R& r, M m) const
 | 
						|
        {
 | 
						|
            return std::inplace_merge(detail::begin_(r), m, detail::end_(r));
 | 
						|
        }
 | 
						|
 | 
						|
        template<class R, class M, class C>
 | 
						|
        void operator()(R& r, M m, C c) const
 | 
						|
        {
 | 
						|
            return std::inplace_merge(detail::begin_(r), m, detail::end_(r), c);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct next_permutation
 | 
						|
    {
 | 
						|
        typedef bool result_type;
 | 
						|
 | 
						|
        template<class R>
 | 
						|
        bool operator()(R& r) const
 | 
						|
        {
 | 
						|
            return std::next_permutation(detail::begin_(r), detail::end_(r));
 | 
						|
        }
 | 
						|
    
 | 
						|
        template<class R, class C>
 | 
						|
        bool operator()(R& r, C c) const
 | 
						|
        {
 | 
						|
            return std::next_permutation(detail::begin_(r), detail::end_(r), c);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct prev_permutation
 | 
						|
    {
 | 
						|
        typedef bool result_type;
 | 
						|
 | 
						|
        template<class R>
 | 
						|
        bool operator()(R& r) const
 | 
						|
        {
 | 
						|
            return std::prev_permutation(detail::begin_(r), detail::end_(r));
 | 
						|
        }
 | 
						|
    
 | 
						|
        template<class R, class C>
 | 
						|
        bool operator()(R& r, C c) const
 | 
						|
        {
 | 
						|
            return std::prev_permutation(detail::begin_(r), detail::end_(r), c);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
 | 
						|
    struct inner_product
 | 
						|
    {
 | 
						|
        template <typename Sig>
 | 
						|
        struct result;
 | 
						|
 | 
						|
        template <typename This, typename R, typename I, typename T>
 | 
						|
        struct result<This(R&, I, T)>
 | 
						|
            : result<This(R&, I const &, T)>
 | 
						|
        {};
 | 
						|
 | 
						|
        template <typename This, typename R, typename I, typename T>
 | 
						|
        struct result<This(R&, I, T &)>
 | 
						|
        {
 | 
						|
            typedef T type;
 | 
						|
        };
 | 
						|
 | 
						|
        template <typename This, typename R, typename I, typename T, typename C1, typename C2>
 | 
						|
        struct result<This(R&, I, T, C1, C2)>
 | 
						|
            : result<This(R&, I, T const &, C1, C2)>
 | 
						|
        {};
 | 
						|
 | 
						|
        template <typename This, typename R, typename I, typename T, typename C1, typename C2>
 | 
						|
        struct result<This(R&, I, T &, C1, C2)>
 | 
						|
        {
 | 
						|
            typedef T type;
 | 
						|
        };
 | 
						|
 | 
						|
        template <class R, class I, class T>
 | 
						|
        T
 | 
						|
        operator()(R& r, I i, T t) const
 | 
						|
        {
 | 
						|
            return std::inner_product(
 | 
						|
                detail::begin_(r), detail::end_(r), i, t);
 | 
						|
        }
 | 
						|
 | 
						|
        template <class R, class I, class T, class C1, class C2>
 | 
						|
        T
 | 
						|
        operator()(R& r, I i, T t, C1 c1, C2 c2) const
 | 
						|
        {
 | 
						|
            return std::inner_product(
 | 
						|
                detail::begin_(r), detail::end_(r), i, 
 | 
						|
                t, c1, c2);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct partial_sum
 | 
						|
    {
 | 
						|
        template <typename Sig>
 | 
						|
        struct result;
 | 
						|
 | 
						|
        template <typename This, class R, class I>
 | 
						|
        struct result<This(R&, I)>
 | 
						|
            : detail::decay_array<I>
 | 
						|
        {};
 | 
						|
 | 
						|
        template <typename This, class R, class I, class C>
 | 
						|
        struct result<This(R&, I, C)>
 | 
						|
            : detail::decay_array<I>
 | 
						|
        {};
 | 
						|
 | 
						|
        template <class R, class I>
 | 
						|
        typename detail::decay_array<I>::type
 | 
						|
        operator()(R& r, I i) const
 | 
						|
        {
 | 
						|
            return std::partial_sum(
 | 
						|
                detail::begin_(r), detail::end_(r), i);
 | 
						|
        }
 | 
						|
 | 
						|
        template <class R, class I, class C>
 | 
						|
        typename detail::decay_array<I>::type
 | 
						|
        operator()(R& r, I i, C c) const
 | 
						|
        {
 | 
						|
            return std::partial_sum(
 | 
						|
                detail::begin_(r), detail::end_(r), i, c);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct adjacent_difference
 | 
						|
    {
 | 
						|
        template <typename Sig>
 | 
						|
        struct result;
 | 
						|
        
 | 
						|
        template <typename This, class R, class I>
 | 
						|
        struct result<This(R&, I)>
 | 
						|
            : detail::decay_array<I>
 | 
						|
        {};
 | 
						|
 | 
						|
        template <typename This,class R, class I, class C>
 | 
						|
        struct result<This(R&, I, C)>
 | 
						|
            : detail::decay_array<I>
 | 
						|
        {};
 | 
						|
 | 
						|
        template <class R, class I>
 | 
						|
        typename detail::decay_array<I>::type
 | 
						|
        operator()(R& r, I i) const
 | 
						|
        {
 | 
						|
            return std::adjacent_difference(
 | 
						|
                detail::begin_(r), detail::end_(r), i);
 | 
						|
        }
 | 
						|
 | 
						|
        template <class R, class I, class C>
 | 
						|
        typename detail::decay_array<I>::type
 | 
						|
        operator()(R& r, I i, C c) const
 | 
						|
        {
 | 
						|
            return std::adjacent_difference(
 | 
						|
                detail::begin_(r), detail::end_(r), i, c);
 | 
						|
        }    
 | 
						|
    };
 | 
						|
 | 
						|
    struct push_heap
 | 
						|
    {
 | 
						|
        typedef void result_type;
 | 
						|
 | 
						|
        template <class R>
 | 
						|
        void operator()(R& r) const
 | 
						|
        {
 | 
						|
            std::push_heap(detail::begin_(r), detail::end_(r));
 | 
						|
        }
 | 
						|
 | 
						|
        template <class R, class C>
 | 
						|
        void operator()(R& r, C c) const
 | 
						|
        {
 | 
						|
            std::push_heap(detail::begin_(r), detail::end_(r), c);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct pop_heap
 | 
						|
    {
 | 
						|
        typedef void result_type;
 | 
						|
 | 
						|
        template <class R>
 | 
						|
        void operator()(R& r) const
 | 
						|
        {
 | 
						|
            std::pop_heap(detail::begin_(r), detail::end_(r));
 | 
						|
        }
 | 
						|
 | 
						|
        template <class R, class C>
 | 
						|
        void operator()(R& r, C c) const
 | 
						|
        {
 | 
						|
            std::pop_heap(detail::begin_(r), detail::end_(r), c);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct make_heap
 | 
						|
    {
 | 
						|
        typedef void result_type;
 | 
						|
 | 
						|
        template <class R>
 | 
						|
        void operator()(R& r) const
 | 
						|
        {
 | 
						|
            std::make_heap(detail::begin_(r), detail::end_(r));
 | 
						|
        }
 | 
						|
 | 
						|
        template <class R, class C>
 | 
						|
        void operator()(R& r, C c) const
 | 
						|
        {
 | 
						|
            std::make_heap(detail::begin_(r), detail::end_(r), c);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct sort_heap
 | 
						|
    {
 | 
						|
        typedef void result_type;
 | 
						|
 | 
						|
        template <class R>
 | 
						|
        void operator()(R& r) const
 | 
						|
        {
 | 
						|
            std::sort_heap(detail::begin_(r), detail::end_(r));
 | 
						|
        }
 | 
						|
 | 
						|
        template <class R, class C>
 | 
						|
        void operator()(R& r, C c) const
 | 
						|
        {
 | 
						|
            std::sort_heap(detail::begin_(r), detail::end_(r), c);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct set_union
 | 
						|
    {
 | 
						|
        template <typename Sig>
 | 
						|
        struct result;
 | 
						|
 | 
						|
        template <typename This, class R1, class R2, class O>
 | 
						|
        struct result<This(R1&, R2&, O)>
 | 
						|
            : detail::decay_array<O>
 | 
						|
        {};
 | 
						|
 | 
						|
        template <typename This, class R1, class R2, class O, typename C>
 | 
						|
        struct result<This(R1&, R2&, O, C)>
 | 
						|
            : detail::decay_array<O>
 | 
						|
        {};
 | 
						|
 | 
						|
        template <class R1, class R2, class O>
 | 
						|
        typename detail::decay_array<O>::type
 | 
						|
        operator()(R1& r1, R2& r2, O o) const
 | 
						|
        {
 | 
						|
            return std::set_union(
 | 
						|
                detail::begin_(r1), detail::end_(r1)
 | 
						|
                , detail::begin_(r2), detail::end_(r2)
 | 
						|
                , o
 | 
						|
                );
 | 
						|
        }
 | 
						|
 | 
						|
        template <class R1, class R2, class O, class C>
 | 
						|
        typename detail::decay_array<O>::type
 | 
						|
        operator()(R1& r1, R2& r2, O o, C c) const
 | 
						|
        {
 | 
						|
            return std::set_union(
 | 
						|
                detail::begin_(r1), detail::end_(r1)
 | 
						|
                , detail::begin_(r2), detail::end_(r2)
 | 
						|
                , o
 | 
						|
                , c
 | 
						|
                );
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct set_intersection
 | 
						|
    {
 | 
						|
        template <typename Sig>
 | 
						|
        struct result;
 | 
						|
 | 
						|
        template <typename This, class R1, class R2, class O>
 | 
						|
        struct result<This(R1&, R2&, O)>
 | 
						|
            : detail::decay_array<O>
 | 
						|
        {};
 | 
						|
 | 
						|
        template <typename This, class R1, class R2, class O, typename C>
 | 
						|
        struct result<This(R1&, R2&, O, C)>
 | 
						|
            : detail::decay_array<O>
 | 
						|
        {};
 | 
						|
 | 
						|
        template <class R1, class R2, class O>
 | 
						|
        typename detail::decay_array<O>::type
 | 
						|
        operator()(R1& r1, R2& r2, O o) const
 | 
						|
        {
 | 
						|
            return std::set_intersection(
 | 
						|
                detail::begin_(r1), detail::end_(r1)
 | 
						|
                , detail::begin_(r2), detail::end_(r2)
 | 
						|
                , o
 | 
						|
                );
 | 
						|
        }
 | 
						|
 | 
						|
        template <class R1, class R2, class O, class C>
 | 
						|
        typename detail::decay_array<O>::type
 | 
						|
        operator()(R1& r1, R2& r2, O o, C c) const
 | 
						|
        {
 | 
						|
            return std::set_intersection(
 | 
						|
                detail::begin_(r1), detail::end_(r1)
 | 
						|
                , detail::begin_(r2), detail::end_(r2)
 | 
						|
                , o
 | 
						|
                , c
 | 
						|
                );
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct set_difference
 | 
						|
    {
 | 
						|
        template <typename Sig>
 | 
						|
        struct result;
 | 
						|
 | 
						|
        template <typename This, class R1, class R2, class O>
 | 
						|
        struct result<This(R1&, R2&, O)>
 | 
						|
            : detail::decay_array<O>
 | 
						|
        {};
 | 
						|
 | 
						|
        template <typename This, class R1, class R2, class O, class C>
 | 
						|
        struct result<This(R1&, R2&, O, C)>
 | 
						|
            : detail::decay_array<O>
 | 
						|
        {};
 | 
						|
 | 
						|
        template <class R1, class R2, class O>
 | 
						|
        typename detail::decay_array<O>::type
 | 
						|
        operator()(R1& r1, R2& r2, O o) const
 | 
						|
        {
 | 
						|
            return std::set_difference(
 | 
						|
                detail::begin_(r1), detail::end_(r1)
 | 
						|
                , detail::begin_(r2), detail::end_(r2)
 | 
						|
                , o
 | 
						|
                );
 | 
						|
        }
 | 
						|
 | 
						|
        template <class R1, class R2, class O, class C>
 | 
						|
        typename detail::decay_array<O>::type
 | 
						|
        operator()(R1& r1, R2& r2, O o, C c) const
 | 
						|
        {
 | 
						|
            return std::set_difference(
 | 
						|
                detail::begin_(r1), detail::end_(r1)
 | 
						|
                , detail::begin_(r2), detail::end_(r2)
 | 
						|
                , o
 | 
						|
                , c
 | 
						|
                );
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    struct set_symmetric_difference
 | 
						|
    {
 | 
						|
        template <typename Sig>
 | 
						|
        struct result;
 | 
						|
 | 
						|
        template <typename This, class R1, class R2, class O>
 | 
						|
        struct result<This(R1&, R2, O)>
 | 
						|
            : detail::decay_array<O>
 | 
						|
        {};
 | 
						|
 | 
						|
        template <typename This, class R1, class R2, class O, class C>
 | 
						|
        struct result<This(R1&, R2, O, C)>
 | 
						|
            : detail::decay_array<O>
 | 
						|
        {};
 | 
						|
 | 
						|
        template <class R1, class R2, class O>
 | 
						|
        typename detail::decay_array<O>::type
 | 
						|
        operator()(R1& r1, R2& r2, O o) const
 | 
						|
        {
 | 
						|
            return std::set_symmetric_difference(
 | 
						|
                detail::begin_(r1), detail::end_(r1)
 | 
						|
                , detail::begin_(r2), detail::end_(r2)
 | 
						|
                , o
 | 
						|
                );
 | 
						|
        }
 | 
						|
 | 
						|
        template <class R1, class R2, class O, class C>
 | 
						|
        typename detail::decay_array<O>::type
 | 
						|
        operator()(R1& r1, R2& r2, O o, C c) const
 | 
						|
        {
 | 
						|
            return std::set_symmetric_difference(
 | 
						|
                detail::begin_(r1), detail::end_(r1)
 | 
						|
                , detail::begin_(r2), detail::end_(r2)
 | 
						|
                , o
 | 
						|
                , c
 | 
						|
                );
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
}}} // boost::phoenix::impl
 | 
						|
 | 
						|
namespace boost { namespace phoenix
 | 
						|
{
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(swap, impl::swap, 2)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(copy, impl::copy, 2)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(copy_backward, impl::copy_backward, 2)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(transform, impl::transform, 3)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(transform, impl::transform, 4)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(replace, impl::replace, 3)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(replace_if, impl::replace_if, 3)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(replace_copy, impl::replace_copy, 4)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(replace_copy_if, impl::replace_copy_if, 4)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(fill, impl::fill, 2)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(fill_n, impl::fill_n, 3)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(generate, impl::generate, 2)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(generate_n, impl::generate_n, 3)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(remove, impl::remove, 2)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(remove_if, impl::remove_if, 2)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(remove_copy, impl::remove_copy, 3)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(remove_copy_if, impl::remove_copy_if, 3)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(unique, impl::unique, 1)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(unique, impl::unique, 2)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(unique_copy, impl::unique_copy, 2)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(unique_copy, impl::unique_copy, 3)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(reverse, impl::reverse, 1)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(reverse_copy, impl::reverse_copy, 2)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(rotate, impl::rotate, 2)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(rotate_copy, impl::rotate_copy, 3)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(random_shuffle, impl::random_shuffle, 1)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(random_shuffle, impl::random_shuffle, 2)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(partition, impl::partition, 2)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(stable_partition, impl::stable_partition, 2)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(sort, impl::sort, 1)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(sort, impl::sort, 2)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(stable_sort, impl::stable_sort, 1)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(stable_sort, impl::stable_sort, 2)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(partial_sort, impl::partial_sort, 2)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(partial_sort, impl::partial_sort, 3)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(partial_sort_copy, impl::partial_sort_copy, 2)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(partial_sort_copy, impl::partial_sort_copy, 3)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(nth_element, impl::nth_element, 2)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(nth_element, impl::nth_element, 3)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(merge, impl::merge, 3)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(merge, impl::merge, 4)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(inplace_merge, impl::inplace_merge, 2)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(inplace_merge, impl::inplace_merge, 3)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(next_permutation, impl::next_permutation, 1)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(next_permutation, impl::next_permutation, 2)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(prev_permutation, impl::prev_permutation, 1)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(prev_permutation, impl::prev_permutation, 2)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(inner_product, impl::inner_product, 3)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(inner_product, impl::inner_product, 5)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(partial_sum, impl::partial_sum, 2)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(partial_sum, impl::partial_sum, 3)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(adjacent_difference, impl::adjacent_difference, 2)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(adjacent_difference, impl::adjacent_difference, 3)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(push_heap, impl::push_heap, 1)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(push_heap, impl::push_heap, 2)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(pop_heap, impl::pop_heap, 1)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(pop_heap, impl::pop_heap, 2)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(make_heap, impl::make_heap, 1)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(make_heap, impl::make_heap, 2)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(sort_heap, impl::sort_heap, 1)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(sort_heap, impl::sort_heap, 2)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(set_union, impl::set_union, 3)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(set_union, impl::set_union, 4)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(set_intersection, impl::set_intersection, 3)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(set_intersection, impl::set_intersection, 4)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(set_difference, impl::set_difference, 3)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(set_difference, impl::set_difference, 4)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(set_symmetric_difference, impl::set_symmetric_difference, 3)
 | 
						|
    BOOST_PHOENIX_ADAPT_CALLABLE(set_symmetric_difference, impl::set_symmetric_difference, 4)
 | 
						|
}}
 | 
						|
 | 
						|
#endif
 |