mirror of
https://github.com/bolero-MURAKAMI/Sprout
synced 2025-07-02 14:04:09 +00:00
add c++14 constexpr numeric algorithms
This commit is contained in:
parent
fd608b74e2
commit
f1555cb917
65 changed files with 433 additions and 150 deletions
|
@ -11,6 +11,8 @@
|
|||
#include <sprout/config.hpp>
|
||||
#include <sprout/container/traits.hpp>
|
||||
#include <sprout/container/functions.hpp>
|
||||
#include <sprout/iterator/type_traits/is_iterator_of.hpp>
|
||||
#include <sprout/type_traits/enabler_if.hpp>
|
||||
#include <sprout/algorithm/fixed/results.hpp>
|
||||
#include <sprout/algorithm/fixed/clamp_range_copy.hpp>
|
||||
|
||||
|
@ -20,7 +22,10 @@ namespace sprout {
|
|||
//
|
||||
// clamp_range_copy
|
||||
//
|
||||
template<typename InputRange, typename Result, typename Compare>
|
||||
template<
|
||||
typename InputRange, typename Result, typename Compare,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
clamp_range_copy(
|
||||
InputRange const& rng, Result const& result,
|
||||
|
@ -31,7 +36,10 @@ namespace sprout {
|
|||
{
|
||||
return sprout::fixed::clamp_range_copy(sprout::begin(rng), sprout::end(rng), result, low, high, comp);
|
||||
}
|
||||
template<typename InputRange, typename Result>
|
||||
template<
|
||||
typename InputRange, typename Result,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
clamp_range_copy(
|
||||
InputRange const& rng, Result const& result,
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/container/functions.hpp>
|
||||
#include <sprout/iterator/type_traits/is_iterator_of.hpp>
|
||||
#include <sprout/type_traits/enabler_if.hpp>
|
||||
#include <sprout/algorithm/fixed/results.hpp>
|
||||
#include <sprout/algorithm/fixed/copy.hpp>
|
||||
|
||||
|
@ -19,7 +21,10 @@ namespace sprout {
|
|||
//
|
||||
// copy
|
||||
//
|
||||
template<typename InputRange, typename Result>
|
||||
template<
|
||||
typename InputRange, typename Result,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
copy(InputRange const& rng, Result const& result) {
|
||||
return sprout::fixed::copy(sprout::begin(rng), sprout::end(rng), result);
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/container/functions.hpp>
|
||||
#include <sprout/iterator/type_traits/is_iterator_of.hpp>
|
||||
#include <sprout/type_traits/enabler_if.hpp>
|
||||
#include <sprout/algorithm/fixed/results.hpp>
|
||||
#include <sprout/algorithm/fixed/copy_backward.hpp>
|
||||
|
||||
|
@ -19,7 +21,10 @@ namespace sprout {
|
|||
//
|
||||
// copy_backward
|
||||
//
|
||||
template<typename BidirectionalRange, typename Result>
|
||||
template<
|
||||
typename BidirectionalRange, typename Result,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
copy_backward(BidirectionalRange const& rng, Result const& result) {
|
||||
return sprout::fixed::copy_backward(sprout::begin(rng), sprout::end(rng), result);
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/container/functions.hpp>
|
||||
#include <sprout/iterator/type_traits/is_iterator_of.hpp>
|
||||
#include <sprout/type_traits/enabler_if.hpp>
|
||||
#include <sprout/algorithm/fixed/results.hpp>
|
||||
#include <sprout/algorithm/fixed/copy_if.hpp>
|
||||
|
||||
|
@ -19,7 +21,10 @@ namespace sprout {
|
|||
//
|
||||
// copy_if
|
||||
//
|
||||
template<typename InputRange, typename Result, typename Predicate>
|
||||
template<
|
||||
typename InputRange, typename Result, typename Predicate,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
copy_if(InputRange const& rng, Result const& result, Predicate pred) {
|
||||
return sprout::fixed::copy_if(sprout::begin(rng), sprout::end(rng), result, pred);
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/container/functions.hpp>
|
||||
#include <sprout/iterator/type_traits/is_iterator_of.hpp>
|
||||
#include <sprout/type_traits/enabler_if.hpp>
|
||||
#include <sprout/algorithm/fixed/results.hpp>
|
||||
#include <sprout/algorithm/fixed/copy_until.hpp>
|
||||
|
||||
|
@ -19,7 +21,10 @@ namespace sprout {
|
|||
//
|
||||
// copy_until
|
||||
//
|
||||
template<typename InputRange, typename Result, typename Predicate>
|
||||
template<
|
||||
typename InputRange, typename Result, typename Predicate,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
copy_until(InputRange const& rng, Result const& result, Predicate pred) {
|
||||
return sprout::fixed::copy_until(sprout::begin(rng), sprout::end(rng), result, pred);
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/container/functions.hpp>
|
||||
#include <sprout/iterator/type_traits/is_iterator_of.hpp>
|
||||
#include <sprout/type_traits/enabler_if.hpp>
|
||||
#include <sprout/algorithm/fixed/results.hpp>
|
||||
#include <sprout/algorithm/fixed/copy_while.hpp>
|
||||
|
||||
|
@ -19,7 +21,10 @@ namespace sprout {
|
|||
//
|
||||
// copy_while
|
||||
//
|
||||
template<typename InputRange, typename Result, typename Predicate>
|
||||
template<
|
||||
typename InputRange, typename Result, typename Predicate,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
copy_while(InputRange const& rng, Result const& result, Predicate pred) {
|
||||
return sprout::fixed::copy_while(sprout::begin(rng), sprout::end(rng), result, pred);
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/container/functions.hpp>
|
||||
#include <sprout/iterator/type_traits/is_iterator_of.hpp>
|
||||
#include <sprout/type_traits/enabler_if.hpp>
|
||||
#include <sprout/algorithm/fixed/results.hpp>
|
||||
#include <sprout/algorithm/fixed/merge.hpp>
|
||||
|
||||
|
@ -19,12 +21,18 @@ namespace sprout {
|
|||
//
|
||||
// merge
|
||||
//
|
||||
template<typename InputRange1, typename InputRange2, typename Result, typename Compare>
|
||||
template<
|
||||
typename InputRange1, typename InputRange2, typename Result, typename Compare,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
merge(InputRange1 const& rng1, InputRange2 const& rng2, Result const& result, Compare comp) {
|
||||
return sprout::fixed::merge(sprout::begin(rng1), sprout::end(rng1), sprout::begin(rng2), sprout::end(rng2), result, comp);
|
||||
}
|
||||
template<typename InputRange1, typename InputRange2, typename Result>
|
||||
template<
|
||||
typename InputRange1, typename InputRange2, typename Result,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
merge(InputRange1 const& rng1, InputRange2 const& rng2, Result const& result) {
|
||||
return sprout::fixed::merge(sprout::begin(rng1), sprout::end(rng1), sprout::begin(rng2), sprout::end(rng2), result);
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/container/functions.hpp>
|
||||
#include <sprout/iterator/type_traits/is_iterator_of.hpp>
|
||||
#include <sprout/type_traits/enabler_if.hpp>
|
||||
#include <sprout/algorithm/fixed/results.hpp>
|
||||
#include <sprout/algorithm/fixed/partition_copy.hpp>
|
||||
|
||||
|
@ -19,7 +21,10 @@ namespace sprout {
|
|||
//
|
||||
// partition_copy
|
||||
//
|
||||
template<typename InputRange, typename Result, typename Predicate>
|
||||
template<
|
||||
typename InputRange, typename Result, typename Predicate,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
partition_copy(InputRange const& rng, Result const& result, Predicate pred) {
|
||||
return sprout::fixed::partition_copy(sprout::begin(rng), sprout::end(rng), result, pred);
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/container/functions.hpp>
|
||||
#include <sprout/iterator/type_traits/is_iterator_of.hpp>
|
||||
#include <sprout/type_traits/enabler_if.hpp>
|
||||
#include <sprout/algorithm/fixed/results.hpp>
|
||||
#include <sprout/algorithm/fixed/remove_copy.hpp>
|
||||
|
||||
|
@ -19,7 +21,10 @@ namespace sprout {
|
|||
//
|
||||
// remove_copy
|
||||
//
|
||||
template<typename InputRange, typename Result, typename T>
|
||||
template<
|
||||
typename InputRange, typename Result, typename T,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
remove_copy(InputRange const& rng, Result const& result, T const& value) {
|
||||
return sprout::fixed::remove_copy(sprout::begin(rng), sprout::end(rng), result, value);
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/container/functions.hpp>
|
||||
#include <sprout/iterator/type_traits/is_iterator_of.hpp>
|
||||
#include <sprout/type_traits/enabler_if.hpp>
|
||||
#include <sprout/algorithm/fixed/results.hpp>
|
||||
#include <sprout/algorithm/fixed/remove_copy_if.hpp>
|
||||
|
||||
|
@ -19,7 +21,10 @@ namespace sprout {
|
|||
//
|
||||
// remove_copy_if
|
||||
//
|
||||
template<typename InputRange, typename Result, typename Predicate>
|
||||
template<
|
||||
typename InputRange, typename Result, typename Predicate,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
remove_copy_if(InputRange const& rng, Result const& result, Predicate pred) {
|
||||
return sprout::fixed::remove_copy_if(sprout::begin(rng), sprout::end(rng), result, pred);
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/container/functions.hpp>
|
||||
#include <sprout/iterator/type_traits/is_iterator_of.hpp>
|
||||
#include <sprout/type_traits/enabler_if.hpp>
|
||||
#include <sprout/algorithm/fixed/results.hpp>
|
||||
#include <sprout/algorithm/fixed/replace_copy.hpp>
|
||||
|
||||
|
@ -19,7 +21,10 @@ namespace sprout {
|
|||
//
|
||||
// replace_copy
|
||||
//
|
||||
template<typename InputRange, typename Result, typename T>
|
||||
template<
|
||||
typename InputRange, typename Result, typename T,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
replace_copy(InputRange const& rng, Result const& result, T const& old_value, T const& new_value) {
|
||||
return sprout::fixed::replace_copy(sprout::begin(rng), sprout::end(rng), result, old_value, new_value);
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/container/functions.hpp>
|
||||
#include <sprout/iterator/type_traits/is_iterator_of.hpp>
|
||||
#include <sprout/type_traits/enabler_if.hpp>
|
||||
#include <sprout/algorithm/fixed/results.hpp>
|
||||
#include <sprout/algorithm/fixed/replace_copy_if.hpp>
|
||||
|
||||
|
@ -19,7 +21,10 @@ namespace sprout {
|
|||
//
|
||||
// replace_copy_if
|
||||
//
|
||||
template<typename InputRange, typename Result, typename T, typename Predicate>
|
||||
template<
|
||||
typename InputRange, typename Result, typename T, typename Predicate,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
replace_copy_if(InputRange const& rng, Result const& result, Predicate pred, T const& new_value) {
|
||||
return sprout::fixed::replace_copy_if(sprout::begin(rng), sprout::end(rng), result, pred, new_value);
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/container/functions.hpp>
|
||||
#include <sprout/iterator/type_traits/is_iterator_of.hpp>
|
||||
#include <sprout/type_traits/enabler_if.hpp>
|
||||
#include <sprout/algorithm/fixed/results.hpp>
|
||||
#include <sprout/algorithm/fixed/reverse_copy.hpp>
|
||||
|
||||
|
@ -19,7 +21,10 @@ namespace sprout {
|
|||
//
|
||||
// reverse_copy
|
||||
//
|
||||
template<typename BidirectionalRange, typename Result>
|
||||
template<
|
||||
typename BidirectionalRange, typename Result,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
reverse_copy(BidirectionalRange const& rng, Result const& result) {
|
||||
return sprout::fixed::reverse_copy(sprout::begin(rng), sprout::end(rng), result);
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
#include <sprout/config.hpp>
|
||||
#include <sprout/container/traits.hpp>
|
||||
#include <sprout/container/functions.hpp>
|
||||
#include <sprout/iterator/type_traits/is_iterator_of.hpp>
|
||||
#include <sprout/type_traits/enabler_if.hpp>
|
||||
#include <sprout/algorithm/fixed/results.hpp>
|
||||
#include <sprout/algorithm/fixed/rotate_copy.hpp>
|
||||
|
||||
|
@ -20,7 +22,10 @@ namespace sprout {
|
|||
//
|
||||
// rotate_copy
|
||||
//
|
||||
template<typename ForwardRange, typename Result>
|
||||
template<
|
||||
typename ForwardRange, typename Result,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
rotate_copy(
|
||||
ForwardRange const& rng, typename sprout::container_traits<ForwardRange>::const_iterator middle,
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/container/functions.hpp>
|
||||
#include <sprout/iterator/type_traits/is_iterator_of.hpp>
|
||||
#include <sprout/type_traits/enabler_if.hpp>
|
||||
#include <sprout/algorithm/fixed/results.hpp>
|
||||
#include <sprout/algorithm/fixed/set_difference.hpp>
|
||||
|
||||
|
@ -19,12 +21,18 @@ namespace sprout {
|
|||
//
|
||||
// set_difference
|
||||
//
|
||||
template<typename InputRange1, typename InputRange2, typename Result, typename Compare>
|
||||
template<
|
||||
typename InputRange1, typename InputRange2, typename Result, typename Compare,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
set_difference(InputRange1 const& rng1, InputRange2 const& rng2, Result const& result, Compare comp) {
|
||||
return sprout::fixed::set_difference(sprout::begin(rng1), sprout::end(rng1), sprout::begin(rng2), sprout::end(rng2), result, comp);
|
||||
}
|
||||
template<typename InputRange1, typename InputRange2, typename Result>
|
||||
template<
|
||||
typename InputRange1, typename InputRange2, typename Result,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
set_difference(InputRange1 const& rng1, InputRange2 const& rng2, Result const& result) {
|
||||
return sprout::fixed::set_difference(sprout::begin(rng1), sprout::end(rng1), sprout::begin(rng2), sprout::end(rng2), result);
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/container/functions.hpp>
|
||||
#include <sprout/iterator/type_traits/is_iterator_of.hpp>
|
||||
#include <sprout/type_traits/enabler_if.hpp>
|
||||
#include <sprout/algorithm/fixed/results.hpp>
|
||||
#include <sprout/algorithm/fixed/set_intersection.hpp>
|
||||
|
||||
|
@ -19,12 +21,18 @@ namespace sprout {
|
|||
//
|
||||
// set_intersection
|
||||
//
|
||||
template<typename InputRange1, typename InputRange2, typename Result, typename Compare>
|
||||
template<
|
||||
typename InputRange1, typename InputRange2, typename Result, typename Compare,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
set_intersection(InputRange1 const& rng1, InputRange2 const& rng2, Result const& result, Compare comp) {
|
||||
return sprout::fixed::set_intersection(sprout::begin(rng1), sprout::end(rng1), sprout::begin(rng2), sprout::end(rng2), result, comp);
|
||||
}
|
||||
template<typename InputRange1, typename InputRange2, typename Result>
|
||||
template<
|
||||
typename InputRange1, typename InputRange2, typename Result,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
set_intersection(InputRange1 const& rng1, InputRange2 const& rng2, Result const& result) {
|
||||
return sprout::fixed::set_intersection(sprout::begin(rng1), sprout::end(rng1), sprout::begin(rng2), sprout::end(rng2), result);
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/container/functions.hpp>
|
||||
#include <sprout/iterator/type_traits/is_iterator_of.hpp>
|
||||
#include <sprout/type_traits/enabler_if.hpp>
|
||||
#include <sprout/algorithm/fixed/results.hpp>
|
||||
#include <sprout/algorithm/fixed/set_symmetric_difference.hpp>
|
||||
|
||||
|
@ -19,12 +21,18 @@ namespace sprout {
|
|||
//
|
||||
// set_symmetric_difference
|
||||
//
|
||||
template<typename InputRange1, typename InputRange2, typename Result, typename Compare>
|
||||
template<
|
||||
typename InputRange1, typename InputRange2, typename Result, typename Compare,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
set_symmetric_difference(InputRange1 const& rng1, InputRange2 const& rng2, Result const& result, Compare comp) {
|
||||
return sprout::fixed::set_symmetric_difference(sprout::begin(rng1), sprout::end(rng1), sprout::begin(rng2), sprout::end(rng2), result, comp);
|
||||
}
|
||||
template<typename InputRange1, typename InputRange2, typename Result>
|
||||
template<
|
||||
typename InputRange1, typename InputRange2, typename Result,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
set_symmetric_difference(InputRange1 const& rng1, InputRange2 const& rng2, Result const& result) {
|
||||
return sprout::fixed::set_symmetric_difference(sprout::begin(rng1), sprout::end(rng1), sprout::begin(rng2), sprout::end(rng2), result);
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/container/functions.hpp>
|
||||
#include <sprout/iterator/type_traits/is_iterator_of.hpp>
|
||||
#include <sprout/type_traits/enabler_if.hpp>
|
||||
#include <sprout/algorithm/fixed/results.hpp>
|
||||
#include <sprout/algorithm/fixed/set_union.hpp>
|
||||
|
||||
|
@ -19,12 +21,18 @@ namespace sprout {
|
|||
//
|
||||
// set_union
|
||||
//
|
||||
template<typename InputRange1, typename InputRange2, typename Result, typename Compare>
|
||||
template<
|
||||
typename InputRange1, typename InputRange2, typename Result, typename Compare,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
set_union(InputRange1 const& rng1, InputRange2 const& rng2, Result const& result, Compare comp) {
|
||||
return sprout::fixed::set_union(sprout::begin(rng1), sprout::end(rng1), sprout::begin(rng2), sprout::end(rng2), result, comp);
|
||||
}
|
||||
template<typename InputRange1, typename InputRange2, typename Result>
|
||||
template<
|
||||
typename InputRange1, typename InputRange2, typename Result,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
set_union(InputRange1 const& rng1, InputRange2 const& rng2, Result const& result) {
|
||||
return sprout::fixed::set_union(sprout::begin(rng1), sprout::end(rng1), sprout::begin(rng2), sprout::end(rng2), result);
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/container/functions.hpp>
|
||||
#include <sprout/iterator/type_traits/is_iterator_of.hpp>
|
||||
#include <sprout/type_traits/enabler_if.hpp>
|
||||
#include <sprout/algorithm/fixed/results.hpp>
|
||||
#include <sprout/algorithm/fixed/stable_partition_copy.hpp>
|
||||
|
||||
|
@ -19,7 +21,10 @@ namespace sprout {
|
|||
//
|
||||
// stable_partition_copy
|
||||
//
|
||||
template<typename BidirectionalRange, typename Result, typename Predicate>
|
||||
template<
|
||||
typename BidirectionalRange, typename Result, typename Predicate,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
stable_partition_copy(BidirectionalRange const& rng, Result const& result, Predicate pred) {
|
||||
return sprout::fixed::stable_partition_copy(sprout::begin(rng), sprout::end(rng), result, pred);
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
#include <sprout/config.hpp>
|
||||
#include <sprout/container/traits.hpp>
|
||||
#include <sprout/container/functions.hpp>
|
||||
#include <sprout/iterator/type_traits/is_iterator_of.hpp>
|
||||
#include <sprout/type_traits/enabler_if.hpp>
|
||||
#include <sprout/algorithm/fixed/results.hpp>
|
||||
#include <sprout/algorithm/fixed/swap_element_copy.hpp>
|
||||
|
||||
|
@ -20,7 +22,10 @@ namespace sprout {
|
|||
//
|
||||
// swap_element_copy
|
||||
//
|
||||
template<typename ForwardRange, typename Result>
|
||||
template<
|
||||
typename ForwardRange, typename Result,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
swap_element_copy(
|
||||
ForwardRange const& rng, Result const& result,
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/container/functions.hpp>
|
||||
#include <sprout/iterator/type_traits/is_iterator_of.hpp>
|
||||
#include <sprout/type_traits/enabler_if.hpp>
|
||||
#include <sprout/algorithm/fixed/results.hpp>
|
||||
#include <sprout/algorithm/transform.hpp>
|
||||
|
||||
|
@ -19,12 +21,18 @@ namespace sprout {
|
|||
//
|
||||
// transform
|
||||
//
|
||||
template<typename InputRange, typename Result, typename UnaryOperation>
|
||||
template<
|
||||
typename InputRange, typename Result, typename UnaryOperation,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
transform(InputRange const& rng, Result const& result, UnaryOperation op) {
|
||||
return sprout::fixed::transform(sprout::begin(rng), sprout::end(rng), result, op);
|
||||
}
|
||||
template<typename InputRange1, typename InputRange2, typename Result, typename BinaryOperation>
|
||||
template<
|
||||
typename InputRange1, typename InputRange2, typename Result, typename BinaryOperation,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
transform(InputRange1 const& rng1, InputRange2 const& rng2, Result const& result, BinaryOperation op) {
|
||||
return sprout::fixed::transform(sprout::begin(rng1), sprout::end(rng1), sprout::begin(rng2), result, op);
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/container/functions.hpp>
|
||||
#include <sprout/iterator/type_traits/is_iterator_of.hpp>
|
||||
#include <sprout/type_traits/enabler_if.hpp>
|
||||
#include <sprout/algorithm/fixed/results.hpp>
|
||||
#include <sprout/algorithm/fixed/unique_copy.hpp>
|
||||
|
||||
|
@ -19,12 +21,18 @@ namespace sprout {
|
|||
//
|
||||
// unique_copy
|
||||
//
|
||||
template<typename InputRange, typename Result, typename BinaryPredicate>
|
||||
template<
|
||||
typename InputRange, typename Result, typename BinaryPredicate,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
unique_copy(InputRange const& rng, Result const& result, BinaryPredicate pred) {
|
||||
return sprout::fixed::unique_copy(sprout::begin(rng), sprout::end(rng), result, pred);
|
||||
}
|
||||
template<typename InputRange, typename Result>
|
||||
template<
|
||||
typename InputRange, typename Result,
|
||||
typename sprout::enabler_if<!sprout::is_iterator_outputable<Result>::value>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR typename sprout::fixed::results::algorithm<Result>::type
|
||||
unique_copy(InputRange const& rng, Result const& result) {
|
||||
return sprout::fixed::unique_copy(sprout::begin(rng), sprout::end(rng), result);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue