diff --git a/sprout/algorithm/fill.hpp b/sprout/algorithm/fill.hpp index 3c7a09a6..8f193716 100644 --- a/sprout/algorithm/fill.hpp +++ b/sprout/algorithm/fill.hpp @@ -9,6 +9,20 @@ #define SPROUT_ALGORITHM_FILL_HPP #include + +namespace sprout { + // + // 25.3.6 Fill + // + template + inline SPROUT_CXX14_CONSTEXPR void + fill(ForwrdIterator first, ForwrdIterator last, T const& value) { + while (first != last) { + *first++ = value; + } + } +} // namespace sprout + #include #include diff --git a/sprout/algorithm/fill_n.hpp b/sprout/algorithm/fill_n.hpp index c092c0e6..dcf17076 100644 --- a/sprout/algorithm/fill_n.hpp +++ b/sprout/algorithm/fill_n.hpp @@ -9,6 +9,26 @@ #define SPROUT_ALGORITHM_FILL_N_HPP #include +#include +#include + +namespace sprout { + // + // 25.3.6 Fill + // + template< + typename OutputIterator, typename Size, typename T, + typename sprout::enabler_if::value>::type = sprout::enabler + > + inline SPROUT_CXX14_CONSTEXPR OutputIterator + fill_n(OutputIterator first, Size n, T const& value) { + while (n-- > 0) { + *first++ = value; + } + return first; + } +} // namespace sprout + #include #include diff --git a/sprout/algorithm/fit/replace_copy_if.hpp b/sprout/algorithm/fit/replace_copy_if.hpp index 79f683cd..2589a351 100644 --- a/sprout/algorithm/fit/replace_copy_if.hpp +++ b/sprout/algorithm/fit/replace_copy_if.hpp @@ -21,7 +21,7 @@ namespace sprout { namespace fit { namespace detail { - template + template inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm::type replace_copy_if_impl( InputIterator first, InputIterator last, Result const& result, Predicate pred, T const& new_value, @@ -38,7 +38,7 @@ namespace sprout { // // replace_copy_if // - template + template inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm::type replace_copy_if(InputIterator first, InputIterator last, Result const& result, Predicate pred, T const& new_value) { static_assert(sprout::is_forward_iterator::value, "Sorry, not implemented."); diff --git a/sprout/algorithm/fit/replace_if.hpp b/sprout/algorithm/fit/replace_if.hpp index cbecb787..bd4314ef 100644 --- a/sprout/algorithm/fit/replace_if.hpp +++ b/sprout/algorithm/fit/replace_if.hpp @@ -19,7 +19,7 @@ namespace sprout { namespace fit { namespace detail { - template + template inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm::type replace_if_impl( Container const& cont, Predicate pred, T const& new_value, @@ -36,7 +36,7 @@ namespace sprout { // // replace_if // - template + template inline SPROUT_CONSTEXPR typename sprout::fit::result_of::algorithm::type replace_if(Container const& cont, Predicate pred, T const& new_value) { return sprout::fit::detail::replace_if_impl(cont, pred, new_value, sprout::internal_begin_offset(cont)); diff --git a/sprout/algorithm/fixed/fill_n.hpp b/sprout/algorithm/fixed/fill_n.hpp index c9b2f950..45e74fe4 100644 --- a/sprout/algorithm/fixed/fill_n.hpp +++ b/sprout/algorithm/fixed/fill_n.hpp @@ -14,6 +14,8 @@ #include #include #include +#include +#include #include #include #include @@ -64,7 +66,20 @@ namespace sprout { } } // namespace fixed - using sprout::fixed::fill_n; + template< + typename Container, typename Size, typename T, + typename sprout::enabler_if::value>::type = sprout::enabler + > + inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm::type + fill_n(Container const& cont, Size n, T const& value) { + return sprout::fixed::fill_n(cont, n, value); + } + + template + inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm::type + fill_n(Size n, T const& value) { + return sprout::fixed::fill_n(n, value); + } } // namespace sprout #endif // #ifndef SPROUT_ALGORITHM_FIXED_FILL_N_HPP diff --git a/sprout/algorithm/fixed/replace_copy.hpp b/sprout/algorithm/fixed/replace_copy.hpp index 885b3724..279a308f 100644 --- a/sprout/algorithm/fixed/replace_copy.hpp +++ b/sprout/algorithm/fixed/replace_copy.hpp @@ -17,6 +17,8 @@ #include #include #include +#include +#include #include #include #include @@ -146,7 +148,20 @@ namespace sprout { } } // namespace fixed - using sprout::fixed::replace_copy; + template< + typename InputIterator, typename Result, typename T, + typename sprout::enabler_if::value>::type = sprout::enabler + > + inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm::type + replace_copy(InputIterator first, InputIterator last, Result const& result, T const& old_value, T const& new_value) { + return sprout::fixed::replace_copy(first, last, result, old_value, new_value); + } + + template + inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm::type + replace_copy(InputIterator first, InputIterator last, T const& old_value, T const& new_value) { + return sprout::fixed::replace_copy(first, last, old_value, new_value); + } } // namespace sprout #endif // #ifndef SPROUT_ALGORITHM_FIXED_REPLACE_COPY_HPP diff --git a/sprout/algorithm/fixed/replace_copy_if.hpp b/sprout/algorithm/fixed/replace_copy_if.hpp index 4e21495f..1ef3a583 100644 --- a/sprout/algorithm/fixed/replace_copy_if.hpp +++ b/sprout/algorithm/fixed/replace_copy_if.hpp @@ -17,6 +17,8 @@ #include #include #include +#include +#include #include #include #include @@ -24,7 +26,7 @@ namespace sprout { namespace fixed { namespace detail { - template + template inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm::type replace_copy_if_impl_ra( RandomAccessIterator first, RandomAccessIterator, @@ -43,7 +45,7 @@ namespace sprout { )... ); } - template + template inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm::type replace_copy_if( RandomAccessIterator first, RandomAccessIterator last, @@ -60,7 +62,7 @@ namespace sprout { sprout::distance(first, last) ); } - template + template inline SPROUT_CONSTEXPR typename std::enable_if< sprout::container_traits::static_size == sizeof...(Args), typename sprout::fixed::result_of::algorithm::type @@ -74,7 +76,7 @@ namespace sprout { { return sprout::remake(result, sprout::size(result), args...); } - template + template inline SPROUT_CONSTEXPR typename std::enable_if< sprout::container_traits::static_size != sizeof...(Args), typename sprout::fixed::result_of::algorithm::type @@ -95,7 +97,7 @@ namespace sprout { : sprout::detail::container_complate(result, args...) ; } - template + template inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm::type replace_copy_if( InputIterator first, InputIterator last, @@ -106,7 +108,7 @@ namespace sprout { return sprout::fixed::detail::replace_copy_if_impl(first, last, result, pred, new_value, sprout::size(result)); } - template + template inline SPROUT_CONSTEXPR typename std::enable_if< sprout::is_fixed_container::value, typename sprout::fixed::result_of::algorithm::type @@ -116,7 +118,7 @@ namespace sprout { return sprout::fixed::detail::replace_copy_if(first, last, result, pred, new_value, category()); } - template + template inline SPROUT_CONSTEXPR typename std::enable_if< !sprout::is_fixed_container::value, typename sprout::fixed::result_of::algorithm::type @@ -132,20 +134,33 @@ namespace sprout { // // replace_copy_if // - template + template inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm::type replace_copy_if(InputIterator first, InputIterator last, Result const& result, Predicate pred, T const& new_value) { return sprout::fixed::detail::replace_copy_if(first, last, result, pred, new_value); } - template + template inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm::type replace_copy_if(InputIterator first, InputIterator last, Predicate pred, T const& new_value) { return sprout::fixed::replace_copy_if(first, last, sprout::pit(), pred, new_value); } } // namespace fixed - using sprout::fixed::replace_copy_if; + template< + typename InputIterator, typename Result, typename Predicate, typename T, + typename sprout::enabler_if::value>::type = sprout::enabler + > + inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm::type + replace_copy_if(InputIterator first, InputIterator last, Result const& result, Predicate pred, T const& new_value) { + return sprout::fixed::replace_copy_if(first, last, result, pred, new_value); + } + + template + inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm::type + replace_copy_if(InputIterator first, InputIterator last, Predicate pred, T const& new_value) { + return sprout::fixed::replace_copy_if(first, last, pred, new_value); + } } // namespace sprout #endif // #ifndef SPROUT_ALGORITHM_FIXED_REPLACE_COPY_IF_HPP diff --git a/sprout/algorithm/fixed/replace_if.hpp b/sprout/algorithm/fixed/replace_if.hpp index edb24199..7592ad0d 100644 --- a/sprout/algorithm/fixed/replace_if.hpp +++ b/sprout/algorithm/fixed/replace_if.hpp @@ -18,7 +18,7 @@ namespace sprout { // // replace_if // - template + template inline SPROUT_CONSTEXPR typename sprout::fixed::result_of::algorithm::type replace_if(Container const& cont, Predicate pred, T const& new_value) { return sprout::fixed::replace_copy_if(sprout::begin(cont), sprout::end(cont), cont, pred, new_value); diff --git a/sprout/algorithm/replace_copy.hpp b/sprout/algorithm/replace_copy.hpp index 31e8d95e..afc6a0b6 100644 --- a/sprout/algorithm/replace_copy.hpp +++ b/sprout/algorithm/replace_copy.hpp @@ -9,6 +9,26 @@ #define SPROUT_ALGORITHM_REPLACE_COPY_HPP #include +#include +#include + +namespace sprout { + // + // 25.3.5 Replace + // + template< + typename InputIterator, typename OutputIterator, typename T, + typename sprout::enabler_if::value>::type = sprout::enabler + > + inline SPROUT_CXX14_CONSTEXPR void + replace_copy(InputIterator first, InputIterator last, OutputIterator result, T const& old_value, T const& new_value) { + for (; first != last; ++first) { + *result++ = (*first == old_value ? new_value : *first); + } + return result; + } +} // namespace sprout + #include #include diff --git a/sprout/algorithm/replace_copy_if.hpp b/sprout/algorithm/replace_copy_if.hpp index d23a2b28..e94ad353 100644 --- a/sprout/algorithm/replace_copy_if.hpp +++ b/sprout/algorithm/replace_copy_if.hpp @@ -9,6 +9,26 @@ #define SPROUT_ALGORITHM_REPLACE_COPY_IF_HPP #include +#include +#include + +namespace sprout { + // + // 25.3.5 Replace + // + template< + typename InputIterator, typename OutputIterator, typename Predicate, typename T, + typename sprout::enabler_if::value>::type = sprout::enabler + > + inline SPROUT_CXX14_CONSTEXPR void + replace_copy_if(InputIterator first, InputIterator last, OutputIterator result, Predicate pred, T const& new_value) { + for (; first != last; ++first) { + *result++ = (pred(*first) ? new_value : *first); + } + return result; + } +} // namespace sprout + #include #include diff --git a/sprout/algorithm/replace_if.hpp b/sprout/algorithm/replace_if.hpp index b8a593c2..75689137 100644 --- a/sprout/algorithm/replace_if.hpp +++ b/sprout/algorithm/replace_if.hpp @@ -9,6 +9,22 @@ #define SPROUT_ALGORITHM_REPLACE_IF_HPP #include + +namespace sprout { + // + // 25.3.5 Replace + // + template + inline SPROUT_CXX14_CONSTEXPR void + replace_if(ForwrdIterator first, ForwrdIterator last, Predicate pred, T const& new_value) { + for (; first != last; ++first) { + if (pred(*first)) { + *first = new_value; + } + } + } +} // namespace sprout + #include #include