From f359cec6effa1f076468bc311001ce04b356aff6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ion=20Gazta=C3=B1aga?= Date: Mon, 16 Mar 2026 13:49:46 +0100 Subject: [PATCH] Use correct OutIter template name and eliminate unneeded generate_n_scan overload --- .../experimental/segmented_generate_n.hpp | 41 +++++++------------ 1 file changed, 15 insertions(+), 26 deletions(-) diff --git a/include/boost/container/experimental/segmented_generate_n.hpp b/include/boost/container/experimental/segmented_generate_n.hpp index b374ea5..6306c15 100644 --- a/include/boost/container/experimental/segmented_generate_n.hpp +++ b/include/boost/container/experimental/segmented_generate_n.hpp @@ -27,24 +27,13 @@ namespace boost { namespace container { -template -FwdIt segmented_generate_n(FwdIt first, Size count, Generator gen); +template +OutIt segmented_generate_n(OutIt first, Size count, Generator gen); namespace detail_algo { -template -FwdIt generate_n_scan(FwdIt first, FwdIt last, Size& count, Generator& gen, non_segmented_iterator_tag) -{ - Size n = count; //Avoid aliasing the count parameter - for(; first != last && n > 0; ++first, --n) - *first = gen(); - count = n; - return first; -} - - -template -InIter generate_n_scan_non_segmented(InIter first, InIter last, Size& count, const Generator &gen, const std::random_access_iterator_tag &) +template +OutIter generate_n_scan_non_segmented(OutIter first, OutIter last, Size& count, const Generator &gen, const std::random_access_iterator_tag &) { Size range_sz = Size(last - first); Size local_count = count < range_sz ? count : range_sz; @@ -55,8 +44,8 @@ InIter generate_n_scan_non_segmented(InIter first, InIter last, Size& count, con return first; } -template -InIter generate_n_scan_non_segmented(InIter first, InIter last, Size& count, const Generator &gen, Tag) +template +OutIter generate_n_scan_non_segmented(OutIter first, OutIter last, Size& count, const Generator &gen, Tag) { Size local_count = count; //Avoid aliasing the count parameter @@ -68,10 +57,10 @@ InIter generate_n_scan_non_segmented(InIter first, InIter last, Size& count, con return first; } -template -BOOST_CONTAINER_FORCEINLINE InIter generate_n_scan(InIter first, InIter last, Size& count, const Generator &gen, non_segmented_iterator_tag) +template +BOOST_CONTAINER_FORCEINLINE OutIter generate_n_scan(OutIter first, OutIter last, Size& count, const Generator &gen, non_segmented_iterator_tag) { - return (generate_n_scan_non_segmented)(first, last, count, gen, typename iterator_traits::iterator_category()); + return (generate_n_scan_non_segmented)(first, last, count, gen, typename iterator_traits::iterator_category()); } template @@ -126,9 +115,9 @@ SegIter segmented_generate_n_ref return traits::compose(scur, lcur); } -template -FwdIt segmented_generate_n_ref - (FwdIt first, Size count, Generator& gen, non_segmented_iterator_tag) +template +OutIt segmented_generate_n_ref + (OutIt first, Size count, Generator& gen, non_segmented_iterator_tag) { for(; count > 0; ++first, --count) *first = gen(); @@ -141,10 +130,10 @@ FwdIt segmented_generate_n_ref //! \c count elements starting at \c first. Generator state is //! preserved across segment boundaries. //! Returns an iterator past the last generated element. -template -inline FwdIt segmented_generate_n(FwdIt first, Size count, Generator gen) +template +BOOST_CONTAINER_FORCEINLINE OutIt segmented_generate_n(OutIt first, Size count, Generator gen) { - typedef segmented_iterator_traits traits; + typedef segmented_iterator_traits traits; return detail_algo::segmented_generate_n_ref(first, count, gen, typename traits::is_segmented_iterator()); }