1 // Copyright 2005 Daniel Wallin.
2 // Copyright 2005 Joel de Guzman.
3 // Copyright 2005 Dan Marsden.
4 // Copyright 2015 John Fletcher.
6 // Use, modification and distribution is subject to the Boost Software
7 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
8 // http://www.boost.org/LICENSE_1_0.txt)
10 // Modeled after range_ex, Copyright 2004 Eric Niebler
12 #ifndef BOOST_PHOENIX_ALGORITHM_TRANSFORMATION_HPP
13 #define BOOST_PHOENIX_ALGORITHM_TRANSFORMATION_HPP
18 #include <boost/phoenix/core/limits.hpp>
19 #include <boost/phoenix/stl/algorithm/detail/has_sort.hpp>
20 #include <boost/phoenix/stl/algorithm/detail/has_remove.hpp>
21 #include <boost/phoenix/stl/algorithm/detail/has_remove_if.hpp>
22 #include <boost/phoenix/stl/algorithm/detail/has_unique.hpp>
23 #include <boost/phoenix/stl/algorithm/detail/has_reverse.hpp>
24 #include <boost/phoenix/stl/algorithm/detail/has_sort.hpp>
26 #include <boost/phoenix/stl/algorithm/detail/begin.hpp>
27 #include <boost/phoenix/stl/algorithm/detail/end.hpp>
28 #include <boost/phoenix/stl/algorithm/detail/decay_array.hpp>
30 #include <boost/phoenix/function/adapt_callable.hpp>
32 //#include <boost/range/result_iterator.hpp> is deprecated
33 #include <boost/range/iterator.hpp>
34 #include <boost/range/difference_type.hpp>
36 #include <boost/mpl/if.hpp>
38 #include <boost/type_traits/is_void.hpp>
40 namespace boost { namespace phoenix { namespace impl
44 typedef void result_type;
46 template <class A, class B>
47 void operator()(A& a, B& b) const
56 template <typename Sig>
59 template<typename This, class R, class I>
60 struct result<This(R&, I)>
61 : detail::decay_array<I>
64 template<class R, class I>
65 typename detail::decay_array<I>::type
66 operator()(R& r, I i) const
68 return std::copy(detail::begin_(r), detail::end_(r), i);
74 template <typename Sig>
77 template<typename This, class R, class I>
78 struct result<This(R&, I)>
79 : result<This(R&, I const &)>
82 template<typename This, class R, class I>
83 struct result<This(R&, I &)>
88 template<class R, class I>
89 I operator()(R& r, I & i) const
91 return std::copy_backward(detail::begin_(r), detail::end_(r), i);
94 template<class R, class I>
95 I const operator()(R& r, I const & i) const
97 return std::copy_backward(detail::begin_(r), detail::end_(r), i);
103 template <typename Sig>
106 template<typename This, class R, class OutorI1, class ForOut>
107 struct result<This(R&, OutorI1, ForOut)>
108 : detail::decay_array<OutorI1>
112 template<typename This, class R, class OutorI1, class ForOut, class BinF>
113 struct result<This(R&, OutorI1, ForOut, BinF)>
114 : detail::decay_array<ForOut>
118 template<class R, class O, class F>
119 typename result<transform(R&,O,F)>::type
120 operator()(R& r, O o, F f) const
122 return std::transform(detail::begin_(r), detail::end_(r), o, f);
125 template<class R, class I, class O, class F>
126 typename result<transform(R&,I,O,F)>::type
127 operator()(R& r, I i, O o, F f) const
129 return std::transform(detail::begin_(r), detail::end_(r), i, o, f);
135 typedef void result_type;
137 template<class R, class T>
138 void operator()(R& r, T const& what, T const& with) const
140 std::replace(detail::begin_(r), detail::end_(r), what, with);
146 typedef void result_type;
148 template<class R, class P, class T>
149 void operator()(R& r, P p, T const& with) const
151 std::replace_if(detail::begin_(r), detail::end_(r), p, with);
157 template <typename Sig>
160 template<typename This, class R, class O, class T, class T2>
161 struct result<This(R&, O, T&, T2&)>
162 : detail::decay_array<O>
165 template<class R, class O, class T>
166 typename detail::decay_array<O>::type
167 operator()(R& r, O o, T const& what, T const& with) const
169 return std::replace_copy(detail::begin_(r), detail::end_(r), o, what, with);
173 struct replace_copy_if
175 template <typename Sig>
178 template<typename This, class R, class O, class P, class T>
179 struct result<This(R&, O, P, T&)>
180 : detail::decay_array<O>
183 template<class R, class O, class P, class T>
184 typename detail::decay_array<O>::type
185 operator()(R& r, O o, P p, T const& with) const
187 return std::replace_copy_if(detail::begin_(r), detail::end_(r), o, p, with);
193 typedef void result_type;
195 template<class R, class T>
196 void operator()(R& r, T const& x) const
198 std::fill(detail::begin_(r), detail::end_(r), x);
204 typedef void result_type;
206 template<class R, class N, class T>
207 void operator()(R& r, N n, T const& x) const
209 std::fill_n(detail::begin_(r), n, x);
215 typedef void result_type;
217 template<class R, class G>
218 void operator()(R& r, G const & g) const
220 std::generate(detail::begin_(r), detail::end_(r), g);
226 typedef void result_type;
228 template<class R, class N, class G>
229 void operator()(R& r, N n, G g) const
231 std::generate_n(detail::begin_(r), n, g);
237 template <typename Sig>
240 template<typename This, class R, class T>
241 struct result<This(R&, T&)>
246 template<class R, class T>
247 typename range_iterator<R>::type
248 execute(R& r, T const& x, mpl::true_) const
251 return detail::end_(r);
254 template<class R, class T>
255 typename range_iterator<R>::type
256 execute(R& r, T const& x, mpl::false_) const
258 return std::remove(detail::begin_(r), detail::end_(r), x);
261 template<class R, class T>
262 typename range_iterator<R>::type
263 operator()(R& r, T const& x) const
265 return execute(r, x, has_remove<R>());
271 template <typename Sig>
274 template <typename This, class R, class P>
275 struct result<This(R&,P)>
280 template<class R, class P>
281 typename range_iterator<R>::type
282 execute(R& r, P p, mpl::true_) const
285 return detail::end_(r);
288 template<class R, class P>
289 typename range_iterator<R>::type
290 execute(R& r, P p, mpl::false_) const
292 return std::remove_if(detail::begin_(r), detail::end_(r), p);
295 template<class R, class P>
296 typename range_iterator<R>::type
297 operator()(R& r, P p) const
299 return execute(r, p, has_remove_if<R>());
305 template <typename Sig>
308 template<typename This, class R, class O, class T>
309 struct result<This(R&, O, T)>
310 : detail::decay_array<O>
313 template<class R, class O, class T>
314 typename detail::decay_array<O>::type
315 operator()(R& r, O o, T const& x) const
317 return std::remove_copy(detail::begin_(r), detail::end_(r), o, x);
321 struct remove_copy_if
323 template <typename Sig>
326 template<typename This, class R, class O, class P>
327 struct result<This(R&, O, P)>
328 : detail::decay_array<O>
331 template<class R, class O, class P>
332 typename detail::decay_array<O>::type
333 operator()(R& r, O o, P p) const
335 return std::remove_copy_if(detail::begin_(r), detail::end_(r), o, p);
341 template <typename Sig>
344 template<typename This, class R>
345 struct result<This(R&)>
349 template<typename This, class R, class P>
350 struct result<This(R&, P)>
355 typename range_iterator<R>::type
356 execute(R& r, mpl::true_) const
359 return detail::end_(r);
363 typename range_iterator<R>::type
364 execute(R& r, mpl::false_) const
366 return std::unique(detail::begin_(r), detail::end_(r));
370 typename range_iterator<R>::type
371 operator()(R& r) const
373 return execute(r, has_unique<R>());
377 template<class R, class P>
378 typename range_iterator<R>::type
379 execute(R& r, P p, mpl::true_) const
382 return detail::end_(r);
385 template<class R, class P>
386 typename range_iterator<R>::type
387 execute(R& r, P p, mpl::false_) const
389 return std::unique(detail::begin_(r), detail::end_(r), p);
392 template<class R, class P>
393 typename range_iterator<R>::type
394 operator()(R& r, P p) const
396 return execute(r, p, has_unique<R>());
402 template <typename Sig>
405 template<typename This, class R, class O>
406 struct result<This(R&, O)>
407 : detail::decay_array<O>
410 template<typename This, class R, class O, class P>
411 struct result<This(R&, O, P)>
412 : detail::decay_array<O>
415 template<class R, class O>
416 typename detail::decay_array<O>::type operator()(R& r, O o) const
418 return std::unique_copy(
425 template<class R, class O, class P>
426 typename detail::decay_array<O>::type operator()(R& r, O o, P p) const
428 return std::unique_copy(
439 typedef void result_type;
442 void execute(R& r, mpl::true_) const
448 void execute(R& r, mpl::false_) const
450 std::reverse(detail::begin_(r), detail::end_(r));
454 void operator()(R& r) const
456 execute(r, has_reverse<R>());
462 template <typename Sig>
465 template<typename This, class R, class O>
466 struct result<This(R&, O)>
467 : detail::decay_array<O>
470 template<class R, class O>
471 typename detail::decay_array<O>::type operator()(R& r, O o) const
473 return std::reverse_copy(
483 typedef void result_type;
485 template<class R, class M>
486 void operator()(R& r, M m) const
498 template <typename Sig>
501 template<typename This, class R, class M, class O>
502 struct result<This(R&, M, O)>
503 : detail::decay_array<O>
506 template<class R, class M, class O>
507 typename detail::decay_array<O>::type operator()(R& r, M m, O o) const
509 return std::rotate_copy(
518 struct random_shuffle
520 typedef void result_type;
523 void operator()(R& r) const
525 return std::random_shuffle(detail::begin_(r), detail::end_(r));
528 template<class R, class G>
529 void operator()(R& r, G g) const
531 return std::random_shuffle(detail::begin_(r), detail::end_(r), g);
537 template <typename Sig>
540 template <typename This, class R, class P>
541 struct result<This(R&, P)>
545 template<class R, class P>
546 typename range_iterator<R>::type
547 operator()(R& r, P p) const
549 return std::partition(detail::begin_(r), detail::end_(r), p);
553 struct stable_partition
555 template <typename Sig>
558 template <typename This, class R, class P>
559 struct result<This(R&, P)>
563 template<class R, class P>
564 typename range_iterator<R>::type
565 operator()(R& r, P p) const
567 return std::stable_partition(detail::begin_(r), detail::end_(r), p);
573 typedef void result_type;
576 void execute(R& r, mpl::true_) const
582 void execute(R& r, mpl::false_) const
584 std::sort(detail::begin_(r), detail::end_(r));
588 void operator()(R& r) const
590 execute(r, has_sort<R>());
593 template<class R, class C>
594 void execute(R& r, C c, mpl::true_) const
599 template<class R, class C>
600 void execute(R& r, C c, mpl::false_) const
602 std::sort(detail::begin_(r), detail::end_(r), c);
605 template<class R, class C>
606 void operator()(R& r, C c) const
608 execute(r, c, has_sort<R>());
614 typedef void result_type;
617 void operator()(R& r) const
619 std::stable_sort(detail::begin_(r), detail::end_(r));
622 template<class R, class C>
623 void operator()(R& r, C c) const
625 std::stable_sort(detail::begin_(r), detail::end_(r), c);
631 typedef void result_type;
633 template<class R, class M>
634 void operator()(R& r, M m) const
636 std::partial_sort(detail::begin_(r), m, detail::end_(r));
639 template<class R, class M, class C>
640 void operator()(R& r, M m, C c) const
642 std::partial_sort(detail::begin_(r), m, detail::end_(r), c);
646 struct partial_sort_copy
648 template <typename Sig>
651 template <typename This, class R1, class R2>
652 struct result<This(R1&, R2&)>
656 template <typename This, class R1, class R2, class C>
657 struct result<This(R1&, R2&, C)>
661 template <class R1, class R2>
662 typename range_iterator<R2>::type
663 operator()(R1& r1, R2& r2) const
665 return std::partial_sort_copy(
666 detail::begin_(r1), detail::end_(r1)
667 , detail::begin_(r2), detail::end_(r2)
671 template <class R1, class R2, class C>
672 typename range_iterator<R2>::type
673 operator()(R1& r1, R2& r2, C c) const
675 return std::partial_sort_copy(
676 detail::begin_(r1), detail::end_(r1)
677 , detail::begin_(r2), detail::end_(r2)
685 typedef void result_type;
687 template<class R, class N>
688 void operator()(R& r, N n) const
690 return std::nth_element(detail::begin_(r), n, detail::end_(r));
693 template<class R, class N, class C>
694 void operator()(R& r, N n, C c) const
696 return std::nth_element(detail::begin_(r), n, detail::end_(r), c);
702 template <typename Sig>
705 template<typename This, class R1, class R2, class O>
706 struct result<This(R1&, R2&, O)>
707 : detail::decay_array<O>
710 template<typename This, class R1, class R2, class O, class C>
711 struct result<This(R1&, R2&, O, C)>
712 : detail::decay_array<O>
715 template<class R1, class R2, class O>
716 typename detail::decay_array<O>::type operator()(R1& r1, R2& r2, O o) const
719 detail::begin_(r1), detail::end_(r1)
720 , detail::begin_(r2), detail::end_(r2)
725 template<class R1, class R2, class O, class C>
726 typename detail::decay_array<O>::type operator()(R1& r1, R2& r2, O o, C c) const
729 detail::begin_(r1), detail::end_(r1)
730 , detail::begin_(r2), detail::end_(r2)
739 typedef void result_type;
741 template<class R, class M>
742 void operator()(R& r, M m) const
744 return std::inplace_merge(detail::begin_(r), m, detail::end_(r));
747 template<class R, class M, class C>
748 void operator()(R& r, M m, C c) const
750 return std::inplace_merge(detail::begin_(r), m, detail::end_(r), c);
754 struct next_permutation
756 typedef bool result_type;
759 bool operator()(R& r) const
761 return std::next_permutation(detail::begin_(r), detail::end_(r));
764 template<class R, class C>
765 bool operator()(R& r, C c) const
767 return std::next_permutation(detail::begin_(r), detail::end_(r), c);
771 struct prev_permutation
773 typedef bool result_type;
776 bool operator()(R& r) const
778 return std::prev_permutation(detail::begin_(r), detail::end_(r));
781 template<class R, class C>
782 bool operator()(R& r, C c) const
784 return std::prev_permutation(detail::begin_(r), detail::end_(r), c);
791 template <typename Sig>
794 template <typename This, typename R, typename I, typename T>
795 struct result<This(R&, I, T)>
796 : result<This(R&, I const &, T)>
799 template <typename This, typename R, typename I, typename T>
800 struct result<This(R&, I, T &)>
805 template <typename This, typename R, typename I, typename T, typename C1, typename C2>
806 struct result<This(R&, I, T, C1, C2)>
807 : result<This(R&, I, T const &, C1, C2)>
810 template <typename This, typename R, typename I, typename T, typename C1, typename C2>
811 struct result<This(R&, I, T &, C1, C2)>
816 template <class R, class I, class T>
818 operator()(R& r, I i, T t) const
820 return std::inner_product(
821 detail::begin_(r), detail::end_(r), i, t);
824 template <class R, class I, class T, class C1, class C2>
826 operator()(R& r, I i, T t, C1 c1, C2 c2) const
828 return std::inner_product(
829 detail::begin_(r), detail::end_(r), i,
836 template <typename Sig>
839 template <typename This, class R, class I>
840 struct result<This(R&, I)>
841 : detail::decay_array<I>
844 template <typename This, class R, class I, class C>
845 struct result<This(R&, I, C)>
846 : detail::decay_array<I>
849 template <class R, class I>
850 typename detail::decay_array<I>::type
851 operator()(R& r, I i) const
853 return std::partial_sum(
854 detail::begin_(r), detail::end_(r), i);
857 template <class R, class I, class C>
858 typename detail::decay_array<I>::type
859 operator()(R& r, I i, C c) const
861 return std::partial_sum(
862 detail::begin_(r), detail::end_(r), i, c);
866 struct adjacent_difference
868 template <typename Sig>
871 template <typename This, class R, class I>
872 struct result<This(R&, I)>
873 : detail::decay_array<I>
876 template <typename This,class R, class I, class C>
877 struct result<This(R&, I, C)>
878 : detail::decay_array<I>
881 template <class R, class I>
882 typename detail::decay_array<I>::type
883 operator()(R& r, I i) const
885 return std::adjacent_difference(
886 detail::begin_(r), detail::end_(r), i);
889 template <class R, class I, class C>
890 typename detail::decay_array<I>::type
891 operator()(R& r, I i, C c) const
893 return std::adjacent_difference(
894 detail::begin_(r), detail::end_(r), i, c);
900 typedef void result_type;
903 void operator()(R& r) const
905 std::push_heap(detail::begin_(r), detail::end_(r));
908 template <class R, class C>
909 void operator()(R& r, C c) const
911 std::push_heap(detail::begin_(r), detail::end_(r), c);
917 typedef void result_type;
920 void operator()(R& r) const
922 std::pop_heap(detail::begin_(r), detail::end_(r));
925 template <class R, class C>
926 void operator()(R& r, C c) const
928 std::pop_heap(detail::begin_(r), detail::end_(r), c);
934 typedef void result_type;
937 void operator()(R& r) const
939 std::make_heap(detail::begin_(r), detail::end_(r));
942 template <class R, class C>
943 void operator()(R& r, C c) const
945 std::make_heap(detail::begin_(r), detail::end_(r), c);
951 typedef void result_type;
954 void operator()(R& r) const
956 std::sort_heap(detail::begin_(r), detail::end_(r));
959 template <class R, class C>
960 void operator()(R& r, C c) const
962 std::sort_heap(detail::begin_(r), detail::end_(r), c);
968 template <typename Sig>
971 template <typename This, class R1, class R2, class O>
972 struct result<This(R1&, R2&, O)>
973 : detail::decay_array<O>
976 template <typename This, class R1, class R2, class O, typename C>
977 struct result<This(R1&, R2&, O, C)>
978 : detail::decay_array<O>
981 template <class R1, class R2, class O>
982 typename detail::decay_array<O>::type
983 operator()(R1& r1, R2& r2, O o) const
985 return std::set_union(
986 detail::begin_(r1), detail::end_(r1)
987 , detail::begin_(r2), detail::end_(r2)
992 template <class R1, class R2, class O, class C>
993 typename detail::decay_array<O>::type
994 operator()(R1& r1, R2& r2, O o, C c) const
996 return std::set_union(
997 detail::begin_(r1), detail::end_(r1)
998 , detail::begin_(r2), detail::end_(r2)
1005 struct set_intersection
1007 template <typename Sig>
1010 template <typename This, class R1, class R2, class O>
1011 struct result<This(R1&, R2&, O)>
1012 : detail::decay_array<O>
1015 template <typename This, class R1, class R2, class O, typename C>
1016 struct result<This(R1&, R2&, O, C)>
1017 : detail::decay_array<O>
1020 template <class R1, class R2, class O>
1021 typename detail::decay_array<O>::type
1022 operator()(R1& r1, R2& r2, O o) const
1024 return std::set_intersection(
1025 detail::begin_(r1), detail::end_(r1)
1026 , detail::begin_(r2), detail::end_(r2)
1031 template <class R1, class R2, class O, class C>
1032 typename detail::decay_array<O>::type
1033 operator()(R1& r1, R2& r2, O o, C c) const
1035 return std::set_intersection(
1036 detail::begin_(r1), detail::end_(r1)
1037 , detail::begin_(r2), detail::end_(r2)
1044 struct set_difference
1046 template <typename Sig>
1049 template <typename This, class R1, class R2, class O>
1050 struct result<This(R1&, R2&, O)>
1051 : detail::decay_array<O>
1054 template <typename This, class R1, class R2, class O, class C>
1055 struct result<This(R1&, R2&, O, C)>
1056 : detail::decay_array<O>
1059 template <class R1, class R2, class O>
1060 typename detail::decay_array<O>::type
1061 operator()(R1& r1, R2& r2, O o) const
1063 return std::set_difference(
1064 detail::begin_(r1), detail::end_(r1)
1065 , detail::begin_(r2), detail::end_(r2)
1070 template <class R1, class R2, class O, class C>
1071 typename detail::decay_array<O>::type
1072 operator()(R1& r1, R2& r2, O o, C c) const
1074 return std::set_difference(
1075 detail::begin_(r1), detail::end_(r1)
1076 , detail::begin_(r2), detail::end_(r2)
1083 struct set_symmetric_difference
1085 template <typename Sig>
1088 template <typename This, class R1, class R2, class O>
1089 struct result<This(R1&, R2, O)>
1090 : detail::decay_array<O>
1093 template <typename This, class R1, class R2, class O, class C>
1094 struct result<This(R1&, R2, O, C)>
1095 : detail::decay_array<O>
1098 template <class R1, class R2, class O>
1099 typename detail::decay_array<O>::type
1100 operator()(R1& r1, R2& r2, O o) const
1102 return std::set_symmetric_difference(
1103 detail::begin_(r1), detail::end_(r1)
1104 , detail::begin_(r2), detail::end_(r2)
1109 template <class R1, class R2, class O, class C>
1110 typename detail::decay_array<O>::type
1111 operator()(R1& r1, R2& r2, O o, C c) const
1113 return std::set_symmetric_difference(
1114 detail::begin_(r1), detail::end_(r1)
1115 , detail::begin_(r2), detail::end_(r2)
1122 }}} // boost::phoenix::impl
1124 namespace boost { namespace phoenix
1126 BOOST_PHOENIX_ADAPT_CALLABLE(swap, impl::swap, 2)
1127 BOOST_PHOENIX_ADAPT_CALLABLE(copy, impl::copy, 2)
1128 BOOST_PHOENIX_ADAPT_CALLABLE(copy_backward, impl::copy_backward, 2)
1129 BOOST_PHOENIX_ADAPT_CALLABLE(transform, impl::transform, 3)
1130 BOOST_PHOENIX_ADAPT_CALLABLE(transform, impl::transform, 4)
1131 BOOST_PHOENIX_ADAPT_CALLABLE(replace, impl::replace, 3)
1132 BOOST_PHOENIX_ADAPT_CALLABLE(replace_if, impl::replace_if, 3)
1133 BOOST_PHOENIX_ADAPT_CALLABLE(replace_copy, impl::replace_copy, 4)
1134 BOOST_PHOENIX_ADAPT_CALLABLE(replace_copy_if, impl::replace_copy_if, 4)
1135 BOOST_PHOENIX_ADAPT_CALLABLE(fill, impl::fill, 2)
1136 BOOST_PHOENIX_ADAPT_CALLABLE(fill_n, impl::fill_n, 3)
1137 BOOST_PHOENIX_ADAPT_CALLABLE(generate, impl::generate, 2)
1138 BOOST_PHOENIX_ADAPT_CALLABLE(generate_n, impl::generate_n, 3)
1139 BOOST_PHOENIX_ADAPT_CALLABLE(remove, impl::remove, 2)
1140 BOOST_PHOENIX_ADAPT_CALLABLE(remove_if, impl::remove_if, 2)
1141 BOOST_PHOENIX_ADAPT_CALLABLE(remove_copy, impl::remove_copy, 3)
1142 BOOST_PHOENIX_ADAPT_CALLABLE(remove_copy_if, impl::remove_copy_if, 3)
1143 BOOST_PHOENIX_ADAPT_CALLABLE(unique, impl::unique, 1)
1144 BOOST_PHOENIX_ADAPT_CALLABLE(unique, impl::unique, 2)
1145 BOOST_PHOENIX_ADAPT_CALLABLE(unique_copy, impl::unique_copy, 2)
1146 BOOST_PHOENIX_ADAPT_CALLABLE(unique_copy, impl::unique_copy, 3)
1147 BOOST_PHOENIX_ADAPT_CALLABLE(reverse, impl::reverse, 1)
1148 BOOST_PHOENIX_ADAPT_CALLABLE(reverse_copy, impl::reverse_copy, 2)
1149 BOOST_PHOENIX_ADAPT_CALLABLE(rotate, impl::rotate, 2)
1150 BOOST_PHOENIX_ADAPT_CALLABLE(rotate_copy, impl::rotate_copy, 3)
1151 BOOST_PHOENIX_ADAPT_CALLABLE(random_shuffle, impl::random_shuffle, 1)
1152 BOOST_PHOENIX_ADAPT_CALLABLE(random_shuffle, impl::random_shuffle, 2)
1153 BOOST_PHOENIX_ADAPT_CALLABLE(partition, impl::partition, 2)
1154 BOOST_PHOENIX_ADAPT_CALLABLE(stable_partition, impl::stable_partition, 2)
1155 BOOST_PHOENIX_ADAPT_CALLABLE(sort, impl::sort, 1)
1156 BOOST_PHOENIX_ADAPT_CALLABLE(sort, impl::sort, 2)
1157 BOOST_PHOENIX_ADAPT_CALLABLE(stable_sort, impl::stable_sort, 1)
1158 BOOST_PHOENIX_ADAPT_CALLABLE(stable_sort, impl::stable_sort, 2)
1159 BOOST_PHOENIX_ADAPT_CALLABLE(partial_sort, impl::partial_sort, 2)
1160 BOOST_PHOENIX_ADAPT_CALLABLE(partial_sort, impl::partial_sort, 3)
1161 BOOST_PHOENIX_ADAPT_CALLABLE(partial_sort_copy, impl::partial_sort_copy, 2)
1162 BOOST_PHOENIX_ADAPT_CALLABLE(partial_sort_copy, impl::partial_sort_copy, 3)
1163 BOOST_PHOENIX_ADAPT_CALLABLE(nth_element, impl::nth_element, 2)
1164 BOOST_PHOENIX_ADAPT_CALLABLE(nth_element, impl::nth_element, 3)
1165 BOOST_PHOENIX_ADAPT_CALLABLE(merge, impl::merge, 3)
1166 BOOST_PHOENIX_ADAPT_CALLABLE(merge, impl::merge, 4)
1167 BOOST_PHOENIX_ADAPT_CALLABLE(inplace_merge, impl::inplace_merge, 2)
1168 BOOST_PHOENIX_ADAPT_CALLABLE(inplace_merge, impl::inplace_merge, 3)
1169 BOOST_PHOENIX_ADAPT_CALLABLE(next_permutation, impl::next_permutation, 1)
1170 BOOST_PHOENIX_ADAPT_CALLABLE(next_permutation, impl::next_permutation, 2)
1171 BOOST_PHOENIX_ADAPT_CALLABLE(prev_permutation, impl::prev_permutation, 1)
1172 BOOST_PHOENIX_ADAPT_CALLABLE(prev_permutation, impl::prev_permutation, 2)
1173 BOOST_PHOENIX_ADAPT_CALLABLE(inner_product, impl::inner_product, 3)
1174 BOOST_PHOENIX_ADAPT_CALLABLE(inner_product, impl::inner_product, 5)
1175 BOOST_PHOENIX_ADAPT_CALLABLE(partial_sum, impl::partial_sum, 2)
1176 BOOST_PHOENIX_ADAPT_CALLABLE(partial_sum, impl::partial_sum, 3)
1177 BOOST_PHOENIX_ADAPT_CALLABLE(adjacent_difference, impl::adjacent_difference, 2)
1178 BOOST_PHOENIX_ADAPT_CALLABLE(adjacent_difference, impl::adjacent_difference, 3)
1179 BOOST_PHOENIX_ADAPT_CALLABLE(push_heap, impl::push_heap, 1)
1180 BOOST_PHOENIX_ADAPT_CALLABLE(push_heap, impl::push_heap, 2)
1181 BOOST_PHOENIX_ADAPT_CALLABLE(pop_heap, impl::pop_heap, 1)
1182 BOOST_PHOENIX_ADAPT_CALLABLE(pop_heap, impl::pop_heap, 2)
1183 BOOST_PHOENIX_ADAPT_CALLABLE(make_heap, impl::make_heap, 1)
1184 BOOST_PHOENIX_ADAPT_CALLABLE(make_heap, impl::make_heap, 2)
1185 BOOST_PHOENIX_ADAPT_CALLABLE(sort_heap, impl::sort_heap, 1)
1186 BOOST_PHOENIX_ADAPT_CALLABLE(sort_heap, impl::sort_heap, 2)
1187 BOOST_PHOENIX_ADAPT_CALLABLE(set_union, impl::set_union, 3)
1188 BOOST_PHOENIX_ADAPT_CALLABLE(set_union, impl::set_union, 4)
1189 BOOST_PHOENIX_ADAPT_CALLABLE(set_intersection, impl::set_intersection, 3)
1190 BOOST_PHOENIX_ADAPT_CALLABLE(set_intersection, impl::set_intersection, 4)
1191 BOOST_PHOENIX_ADAPT_CALLABLE(set_difference, impl::set_difference, 3)
1192 BOOST_PHOENIX_ADAPT_CALLABLE(set_difference, impl::set_difference, 4)
1193 BOOST_PHOENIX_ADAPT_CALLABLE(set_symmetric_difference, impl::set_symmetric_difference, 3)
1194 BOOST_PHOENIX_ADAPT_CALLABLE(set_symmetric_difference, impl::set_symmetric_difference, 4)