diff --git a/sprout/algorithm/fixed/clamp_range_copy.hpp b/sprout/algorithm/fixed/clamp_range_copy.hpp index be6463fe..678c66b2 100644 --- a/sprout/algorithm/fixed/clamp_range_copy.hpp +++ b/sprout/algorithm/fixed/clamp_range_copy.hpp @@ -17,6 +17,8 @@ #include #include #include +#include +#include #include #include #include @@ -205,7 +207,55 @@ namespace sprout { } } // namespace fixed - using sprout::fixed::clamp_range_copy; + template< + typename InputIterator, typename Result, typename Compare, + typename sprout::enabler_if::value>::type = sprout::enabler + > + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + clamp_range_copy( + InputIterator first, InputIterator last, Result const& result, + typename std::iterator_traits::value_type const& low, + typename std::iterator_traits::value_type const& high, + Compare comp + ) + { + return sprout::fixed::clamp_range_copy(first, last, result, low, high, comp); + } + template< + typename InputIterator, typename Result, + typename sprout::enabler_if::value>::type = sprout::enabler + > + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + clamp_range_copy( + InputIterator first, InputIterator last, Result const& result, + typename std::iterator_traits::value_type const& low, + typename std::iterator_traits::value_type const& high + ) + { + return sprout::fixed::clamp_range_copy(first, last, result, low, high); + } + + template + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + clamp_range_copy( + InputIterator first, InputIterator last, + typename std::iterator_traits::value_type const& low, + typename std::iterator_traits::value_type const& high, + Compare comp + ) + { + return sprout::fixed::clamp_range_copy(first, last, low, high, comp); + } + template + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + clamp_range_copy( + InputIterator first, InputIterator last, + typename std::iterator_traits::value_type const& low, + typename std::iterator_traits::value_type const& high + ) + { + return sprout::fixed::clamp_range_copy(first, last, low, high); + } } // namespace sprout #endif // #ifndef SPROUT_ALGORITHM_FIXED_CLAMP_RANGE_COPY_HPP diff --git a/sprout/algorithm/fixed/copy_until.hpp b/sprout/algorithm/fixed/copy_until.hpp index 94bfa0ae..a8af9f21 100644 --- a/sprout/algorithm/fixed/copy_until.hpp +++ b/sprout/algorithm/fixed/copy_until.hpp @@ -15,6 +15,8 @@ #include #include #include +#include +#include #include #include #include @@ -113,7 +115,20 @@ namespace sprout { } } // namespace fixed - using sprout::fixed::copy_until; + template< + typename InputIterator, typename Result, typename Predicate, + typename sprout::enabler_if::value>::type = sprout::enabler + > + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + copy_until(InputIterator first, InputIterator last, Result const& result, Predicate pred) { + return sprout::fixed::copy_until(first, last, result, pred); + } + + template + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + copy_until(InputIterator first, InputIterator last, Predicate pred) { + return sprout::fixed::copy_until(first, last, pred); + } } // namespace sprout #endif // #ifndef SPROUT_ALGORITHM_FIXED_COPY_UNTIL_HPP diff --git a/sprout/algorithm/fixed/copy_while.hpp b/sprout/algorithm/fixed/copy_while.hpp index 5c3db092..6a305eab 100644 --- a/sprout/algorithm/fixed/copy_while.hpp +++ b/sprout/algorithm/fixed/copy_while.hpp @@ -15,6 +15,8 @@ #include #include #include +#include +#include #include #include #include @@ -112,7 +114,20 @@ namespace sprout { } } // namespace fixed - using sprout::fixed::copy_while; + template< + typename InputIterator, typename Result, typename Predicate, + typename sprout::enabler_if::value>::type = sprout::enabler + > + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + copy_while(InputIterator first, InputIterator last, Result const& result, Predicate pred) { + return sprout::fixed::copy_while(first, last, result, pred); + } + + template< typename Result, typename InputIterator,typename Predicate> + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + copy_while(InputIterator first, InputIterator last, Predicate pred) { + return sprout::fixed::copy_while(first, last, pred); + } } // namespace sprout #endif // #ifndef SPROUT_ALGORITHM_FIXED_COPY_WHILE_HPP diff --git a/sprout/algorithm/fixed/merge.hpp b/sprout/algorithm/fixed/merge.hpp index 733c4364..6c268286 100644 --- a/sprout/algorithm/fixed/merge.hpp +++ b/sprout/algorithm/fixed/merge.hpp @@ -14,6 +14,8 @@ #include #include #include +#include +#include #include #include #include @@ -158,7 +160,52 @@ namespace sprout { } } // namespace fixed - using sprout::fixed::merge; + template< + typename InputIterator1, typename InputIterator2, typename Result, typename Compare, + typename sprout::enabler_if::value>::type = sprout::enabler + > + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + merge( + InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + Result const& result, Compare comp + ) + { + return sprout::fixed::merge(first1, last1, first2, last2, result, comp); + } + template< + typename InputIterator1, typename InputIterator2, typename Result, + typename sprout::enabler_if::value>::type = sprout::enabler + > + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + merge( + InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + Result const& result + ) + { + return sprout::fixed::merge(first1, last1, first2, last2, result); + } + + template + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + merge( + InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + Compare comp + ) + { + return sprout::fixed::merge(first1, last1, first2, last2, comp); + } + template + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + merge( + InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2 + ) + { + return sprout::fixed::merge(first1, last1, first2, last2); + } } // namespace sprout #endif // #ifndef SPROUT_ALGORITHM_FIXED_MERGE_HPP diff --git a/sprout/algorithm/fixed/set_difference.hpp b/sprout/algorithm/fixed/set_difference.hpp index a58288f7..fcf1640e 100644 --- a/sprout/algorithm/fixed/set_difference.hpp +++ b/sprout/algorithm/fixed/set_difference.hpp @@ -14,6 +14,8 @@ #include #include #include +#include +#include #include #include #include @@ -158,7 +160,52 @@ namespace sprout { } } // namespace fixed - using sprout::fixed::set_difference; + template< + typename InputIterator1, typename InputIterator2, typename Result, typename Compare, + typename sprout::enabler_if::value>::type = sprout::enabler + > + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + set_difference( + InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + Result const& result, Compare comp + ) + { + return sprout::fixed::set_difference(first1, last1, first2, last2, result, comp); + } + template< + typename InputIterator1, typename InputIterator2, typename Result, + typename sprout::enabler_if::value>::type = sprout::enabler + > + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + set_difference( + InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + Result const& result + ) + { + return sprout::fixed::set_difference(first1, last1, first2, last2, result); + } + + template + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + set_difference( + InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + Compare comp + ) + { + return sprout::fixed::set_difference(first1, last1, first2, last2, comp); + } + template + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + set_difference( + InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2 + ) + { + return sprout::fixed::set_difference(first1, last1, first2, last2); + } } // namespace sprout #endif // #ifndef SPROUT_ALGORITHM_FIXED_SET_DIFFERENCE_HPP diff --git a/sprout/algorithm/fixed/set_intersection.hpp b/sprout/algorithm/fixed/set_intersection.hpp index 98aff5a3..fab1234c 100644 --- a/sprout/algorithm/fixed/set_intersection.hpp +++ b/sprout/algorithm/fixed/set_intersection.hpp @@ -14,6 +14,8 @@ #include #include #include +#include +#include #include #include #include @@ -155,7 +157,52 @@ namespace sprout { } } // namespace fixed - using sprout::fixed::set_intersection; + template< + typename InputIterator1, typename InputIterator2, typename Result, typename Compare, + typename sprout::enabler_if::value>::type = sprout::enabler + > + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + set_intersection( + InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + Result const& result, Compare comp + ) + { + return sprout::fixed::set_intersection(first1, last1, first2, last2, result, comp); + } + template< + typename InputIterator1, typename InputIterator2, typename Result, + typename sprout::enabler_if::value>::type = sprout::enabler + > + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + set_intersection( + InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + Result const& result + ) + { + return sprout::fixed::set_intersection(first1, last1, first2, last2, result); + } + + template + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + set_intersection( + InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + Compare comp + ) + { + return sprout::fixed::set_intersection(first1, last1, first2, last2, comp); + } + template + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + set_intersection( + InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2 + ) + { + return sprout::fixed::set_intersection(first1, last1, first2, last2); + } } // namespace sprout #endif // #ifndef SPROUT_ALGORITHM_FIXED_SET_INTERSECTION_HPP diff --git a/sprout/algorithm/fixed/set_symmetric_difference.hpp b/sprout/algorithm/fixed/set_symmetric_difference.hpp index d72c195e..78ce7bcc 100644 --- a/sprout/algorithm/fixed/set_symmetric_difference.hpp +++ b/sprout/algorithm/fixed/set_symmetric_difference.hpp @@ -14,6 +14,8 @@ #include #include #include +#include +#include #include #include #include @@ -163,7 +165,52 @@ namespace sprout { } } // namespace fixed - using sprout::fixed::set_symmetric_difference; + template< + typename InputIterator1, typename InputIterator2, typename Result, typename Compare, + typename sprout::enabler_if::value>::type = sprout::enabler + > + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + set_symmetric_difference( + InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + Result const& result, Compare comp + ) + { + return sprout::fixed::set_symmetric_difference(first1, last1, first2, last2, result, comp); + } + template< + typename InputIterator1, typename InputIterator2, typename Result, + typename sprout::enabler_if::value>::type = sprout::enabler + > + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + set_symmetric_difference( + InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + Result const& result + ) + { + return sprout::fixed::set_symmetric_difference(first1, last1, first2, last2, result); + } + + template + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + set_symmetric_difference( + InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + Compare comp + ) + { + return sprout::fixed::set_symmetric_difference(first1, last1, first2, last2, comp); + } + template + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + set_symmetric_difference( + InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2 + ) + { + return sprout::fixed::set_symmetric_difference(first1, last1, first2, last2); + } } // namespace sprout #endif // #ifndef SPROUT_ALGORITHM_FIXED_SET_SYMMETRIC_DIFFERENCE_HPP diff --git a/sprout/algorithm/fixed/set_union.hpp b/sprout/algorithm/fixed/set_union.hpp index 901c8228..805b7746 100644 --- a/sprout/algorithm/fixed/set_union.hpp +++ b/sprout/algorithm/fixed/set_union.hpp @@ -14,6 +14,8 @@ #include #include #include +#include +#include #include #include #include @@ -163,7 +165,52 @@ namespace sprout { } } // namespace fixed - using sprout::fixed::set_union; + template< + typename InputIterator1, typename InputIterator2, typename Result, typename Compare, + typename sprout::enabler_if::value>::type = sprout::enabler + > + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + set_union( + InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + Result const& result, Compare comp + ) + { + return sprout::fixed::set_union(first1, last1, first2, last2, result, comp); + } + template< + typename InputIterator1, typename InputIterator2, typename Result, + typename sprout::enabler_if::value>::type = sprout::enabler + > + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + set_union( + InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + Result const& result + ) + { + return sprout::fixed::set_union(first1, last1, first2, last2, result); + } + + template + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + set_union( + InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2, + Compare comp + ) + { + return sprout::fixed::set_union(first1, last1, first2, last2, comp); + } + template + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + set_union( + InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, InputIterator2 last2 + ) + { + return sprout::fixed::set_union(first1, last1, first2, last2); + } } // namespace sprout #endif // #ifndef SPROUT_ALGORITHM_FIXED_SET_UNION_HPP diff --git a/sprout/algorithm/fixed/swap_element_copy.hpp b/sprout/algorithm/fixed/swap_element_copy.hpp index 9e92bcd1..e2954469 100644 --- a/sprout/algorithm/fixed/swap_element_copy.hpp +++ b/sprout/algorithm/fixed/swap_element_copy.hpp @@ -16,6 +16,8 @@ #include #include #include +#include +#include #include #include #include @@ -133,7 +135,21 @@ namespace sprout { } } // namespace fixed - using sprout::fixed::swap_element_copy; + template< + typename ForwardIterator, typename Result, + typename sprout::enabler_if::value>::type = sprout::enabler + > + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + swap_element_copy(ForwardIterator first, ForwardIterator last, Result const& result, ForwardIterator pos1, ForwardIterator pos2) { + typedef typename std::iterator_traits::iterator_category* category; + return sprout::fixed::detail::swap_element_copy(first, last, result, pos1, pos2, category()); + } + + template + inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm::type + swap_element_copy(ForwardIterator first, ForwardIterator last, ForwardIterator pos1, ForwardIterator pos2) { + return sprout::fixed::swap_element_copy(first, last, sprout::pit(), pos1, pos2); + } } // namespace sprout #endif // #ifndef SPROUT_ALGORITHM_FIXED_SWAP_ELEMENT_COPY_HPP