From 4cbffe3b448e852b3efafe4f7ee6549cbb51e8b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ion=20Gazta=C3=B1aga?= Date: Sun, 12 Jul 2026 21:28:19 +0200 Subject: [PATCH] Remove BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO --- .../container/experimental/segmented_copy.hpp | 5 ---- .../experimental/segmented_copy_if.hpp | 5 ---- .../experimental/segmented_copy_n.hpp | 27 +++++-------------- .../experimental/segmented_equal.hpp | 5 ---- .../segmented_iterator_traits.hpp | 14 ---------- .../experimental/segmented_merge.hpp | 12 --------- .../experimental/segmented_mismatch.hpp | 6 ----- .../experimental/segmented_remove_copy.hpp | 5 ---- .../experimental/segmented_remove_copy_if.hpp | 5 ---- .../experimental/segmented_reverse_copy.hpp | 5 ---- .../experimental/segmented_set_difference.hpp | 12 --------- .../segmented_set_intersection.hpp | 12 --------- .../segmented_set_symmetric_difference.hpp | 12 --------- .../experimental/segmented_set_union.hpp | 12 --------- 14 files changed, 6 insertions(+), 131 deletions(-) diff --git a/include/boost/container/experimental/segmented_copy.hpp b/include/boost/container/experimental/segmented_copy.hpp index 73fb3a8..7ac5200 100644 --- a/include/boost/container/experimental/segmented_copy.hpp +++ b/include/boost/container/experimental/segmented_copy.hpp @@ -169,14 +169,9 @@ typename algo_enable_if_c< !Tag::value || is_sentinel::value, OutIter>::type segmented_copy_dispatch(SrcIter first, Sent last, OutIter result, Tag, Cat) { -#if !defined(BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO) typedef segmented_iterator_traits dst_traits; return (segmented_copy_dst_dispatch) (first, last, result, typename dst_traits::is_segmented_iterator(), Cat()); -#else - return (segmented_copy_dst_dispatch) - (first, last, result, non_segmented_iterator_tag(), Cat()); -#endif } template diff --git a/include/boost/container/experimental/segmented_copy_if.hpp b/include/boost/container/experimental/segmented_copy_if.hpp index 3338561..04135cf 100644 --- a/include/boost/container/experimental/segmented_copy_if.hpp +++ b/include/boost/container/experimental/segmented_copy_if.hpp @@ -208,14 +208,9 @@ typename algo_enable_if_c< !Tag::value || is_sentinel::value, OutIter>::type segmented_copy_if_dispatch(SrcIter first, Sent last, OutIter result, Pred pred, Tag, Cat) { -#if !defined(BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO) typedef segmented_iterator_traits dst_traits; return (segmented_copy_if_dst_dispatch) (first, last, result, pred, typename dst_traits::is_segmented_iterator(), Cat()); -#else - return (segmented_copy_if_dst_dispatch) - (first, last, result, pred, non_segmented_iterator_tag(), Cat()); -#endif } template diff --git a/include/boost/container/experimental/segmented_copy_n.hpp b/include/boost/container/experimental/segmented_copy_n.hpp index 1ed9daa..e14a008 100644 --- a/include/boost/container/experimental/segmented_copy_n.hpp +++ b/include/boost/container/experimental/segmented_copy_n.hpp @@ -185,14 +185,9 @@ OutIter copy_n_scan const Size range_sz = Size(last - first); Size min_count = count <= range_sz ? count : range_sz; count -= min_count; - #if !defined(BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO) - typedef segmented_iterator_traits dst_traits; - return (segmented_copy_n_dst_dispatch) - (first, unreachable_sentinel_t(), min_count, result, typename dst_traits::is_segmented_iterator()); - #else - return (segmented_copy_n_src_dst_bounded) - (first, unreachable_sentinel_t(), min_count, result, unreachable_sentinel_t()).second; - #endif + typedef segmented_iterator_traits dst_traits; + return (segmented_copy_n_dst_dispatch) + (first, unreachable_sentinel_t(), min_count, result, typename dst_traits::is_segmented_iterator()); } template @@ -200,14 +195,9 @@ BOOST_CONTAINER_FORCEINLINE OutIter copy_n_scan (InIter first, InIter last, Size& BOOST_RESTRICT count, OutIter result, non_segmented_iterator_tag, const Cat &) { - #if !defined(BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO) - typedef segmented_iterator_traits dst_traits; - return (segmented_copy_n_dst_dispatch) - (first, last, count, result, typename dst_traits::is_segmented_iterator()); - #else - return (segmented_copy_n_dst_dispatch) - (first, last, count, result, non_segmented_iterator_tag()); - #endif + typedef segmented_iterator_traits dst_traits; + return (segmented_copy_n_dst_dispatch) + (first, last, count, result, typename dst_traits::is_segmented_iterator()); } template @@ -276,14 +266,9 @@ template BOOST_CONTAINER_FORCEINLINE OutIter segmented_copy_n_dispatch (InIter first, Size count, OutIter result, const non_segmented_iterator_tag &, const Cat&) { -#if !defined(BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO) typedef segmented_iterator_traits dst_traits; return (segmented_copy_n_dst_dispatch) (first, unreachable_sentinel_t(), count, result, typename dst_traits::is_segmented_iterator()); -#else - return (segmented_copy_n_src_dst_bounded) - (first, unreachable_sentinel_t(), count, result, unreachable_sentinel_t()).second; -#endif } } // namespace detail_algo diff --git a/include/boost/container/experimental/segmented_equal.hpp b/include/boost/container/experimental/segmented_equal.hpp index de69ccf..2120bc8 100644 --- a/include/boost/container/experimental/segmented_equal.hpp +++ b/include/boost/container/experimental/segmented_equal.hpp @@ -192,14 +192,9 @@ typename algo_enable_if_c >::type segmented_equal_dispatch(SrcIter first1, Sent last1, InpIter2 first2, BinaryPred pred, Tag, Cat) { -#if !defined(BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO) typedef segmented_iterator_traits iter2_traits; return (segmented_equal_iter2_dispatch) (first1, last1, first2, pred, typename iter2_traits::is_segmented_iterator(), Cat()); -#else - return (segmented_equal_iter2_dispatch) - (first1, last1, first2, pred, non_segmented_iterator_tag(), Cat()); -#endif } template diff --git a/include/boost/container/experimental/segmented_iterator_traits.hpp b/include/boost/container/experimental/segmented_iterator_traits.hpp index e5ab19e..879fb9c 100644 --- a/include/boost/container/experimental/segmented_iterator_traits.hpp +++ b/include/boost/container/experimental/segmented_iterator_traits.hpp @@ -326,20 +326,6 @@ struct deepest_local_iterator #include -////////////////////////////////////////////////////////////////////////////// -// BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO -// -// When defined, segmented algorithms that write to an output iterator will -// NOT exploit segmentation on the output side. Only input (source) iterator -// segmentation is used. This is useful for benchmarking the advantage of -// the segmented output optimisation in isolation. -// -// Define BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO before including any -// segmented algorithm header to disable the optimisation. -////////////////////////////////////////////////////////////////////////////// - -//#define BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO - // When defined, segmented algorithms that count elements (e.g. segmented_count, // segmented_count_if) will use a branchless counting strategy in their // innermost loops, incrementing the count by the boolean result of the diff --git a/include/boost/container/experimental/segmented_merge.hpp b/include/boost/container/experimental/segmented_merge.hpp index 86ad0cc..aa9a933 100644 --- a/include/boost/container/experimental/segmented_merge.hpp +++ b/include/boost/container/experimental/segmented_merge.hpp @@ -228,16 +228,10 @@ BOOST_CONTAINER_FORCEINLINE segtrio merge_seg2_dispatch (Iter1 first1, Sent1 last1, Iter2 first2, Sent2 last2, OutIter result, Comp comp, non_segmented_iterator_tag, const Cat& src1_cat) { -#if !defined(BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO) typedef segmented_iterator_traits out_traits; typedef typename out_traits::is_segmented_iterator is_out_seg_t; return (merge_until_exhausts) (first1, last1, first2, last2, result, comp, is_out_seg_t(), src1_cat); -#else - return (merge_dst_bounded) - (first1, last1, first2, last2, result, unreachable_sentinel_t(), - comp, non_segmented_iterator_tag(), src1_cat); -#endif } template @@ -317,18 +311,12 @@ BOOST_CONTAINER_FORCEINLINE segtrio merge_scan non_segmented_iterator_tag) { typedef sent_filter sf1; -#if !defined(BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO) typedef sent_filter sf2; return (merge_seg2_dispatch) (first1, last1, first2, last2, result, comp, typename sf2::seg_t(), typename sf1::cat_t()); -#else - return (merge_until_exhausts) - (first1, last1, first2, last2, result, comp, - non_segmented_iterator_tag(), typename sf1::cat_t()); -#endif } template diff --git a/include/boost/container/experimental/segmented_mismatch.hpp b/include/boost/container/experimental/segmented_mismatch.hpp index ba8d34f..3dc1587 100644 --- a/include/boost/container/experimental/segmented_mismatch.hpp +++ b/include/boost/container/experimental/segmented_mismatch.hpp @@ -218,16 +218,10 @@ typename algo_enable_if_c< segmented_mismatch_bounded_dispatch (SrcIter first1, Sent last1, InpIter2 first2, Sent2 last2, BinaryPred pred, Tag, Cat) { -#if !defined(BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO) typedef segmented_iterator_traits iter2_traits; return (segmented_mismatch_iter2_bounded) (first1, last1, first2, last2, pred, typename iter2_traits::is_segmented_iterator(), Cat()); -#else - return (segmented_mismatch_iter2_bounded) - (first1, last1, first2, last2, pred, - non_segmented_iterator_tag(), Cat()); -#endif } template diff --git a/include/boost/container/experimental/segmented_remove_copy.hpp b/include/boost/container/experimental/segmented_remove_copy.hpp index 7167cad..a055a72 100644 --- a/include/boost/container/experimental/segmented_remove_copy.hpp +++ b/include/boost/container/experimental/segmented_remove_copy.hpp @@ -198,14 +198,9 @@ typename algo_enable_if_c< segmented_remove_copy_dispatch (SrcIter first, Sent last, OutIter result, const T& value, Tag, Cat) { -#if !defined(BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO) typedef segmented_iterator_traits dst_traits; return (segmented_remove_copy_dst_dispatch) (first, last, result, value, typename dst_traits::is_segmented_iterator(), Cat()); -#else - return (segmented_remove_copy_dst_dispatch) - (first, last, result, value, non_segmented_iterator_tag(), Cat()); -#endif } template diff --git a/include/boost/container/experimental/segmented_remove_copy_if.hpp b/include/boost/container/experimental/segmented_remove_copy_if.hpp index 2d0d412..d05914e 100644 --- a/include/boost/container/experimental/segmented_remove_copy_if.hpp +++ b/include/boost/container/experimental/segmented_remove_copy_if.hpp @@ -214,14 +214,9 @@ typename algo_enable_if_c< segmented_remove_copy_if_dispatch (SrcIter first, Sent last, OutIter result, Pred pred, Tag, Cat) { -#if !defined(BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO) typedef segmented_iterator_traits dst_traits; return (segmented_remove_copy_if_dst_dispatch) (first, last, result, pred, typename dst_traits::is_segmented_iterator(), Cat()); -#else - return (segmented_remove_copy_if_dst_dispatch) - (first, last, result, pred, non_segmented_iterator_tag(), Cat()); -#endif } template diff --git a/include/boost/container/experimental/segmented_reverse_copy.hpp b/include/boost/container/experimental/segmented_reverse_copy.hpp index 3114fa3..0a3cb38 100644 --- a/include/boost/container/experimental/segmented_reverse_copy.hpp +++ b/include/boost/container/experimental/segmented_reverse_copy.hpp @@ -167,14 +167,9 @@ BOOST_CONTAINER_FORCEINLINE typename algo_enable_if_c::type segmented_reverse_copy_dispatch(BidirIter first, BidirIter last, OutIter result, Tag, Cat) { -#if !defined(BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO) typedef segmented_iterator_traits dst_traits; return (segmented_reverse_copy_dst_dispatch) (first, last, result, typename dst_traits::is_segmented_iterator(), Cat()); -#else - return (segmented_reverse_copy_dst_dispatch) - (first, last, result, non_segmented_iterator_tag(), Cat()); -#endif } template diff --git a/include/boost/container/experimental/segmented_set_difference.hpp b/include/boost/container/experimental/segmented_set_difference.hpp index 920ea58..6abcf48 100644 --- a/include/boost/container/experimental/segmented_set_difference.hpp +++ b/include/boost/container/experimental/segmented_set_difference.hpp @@ -137,16 +137,10 @@ BOOST_CONTAINER_FORCEINLINE segtrio set_difference_seg2_d (Iter1 first1, Sent1 last1, Iter2 first2, Sent2 last2, OutIter result, Comp comp, non_segmented_iterator_tag, const Cat& src1_cat) { -#if !defined(BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO) typedef segmented_iterator_traits out_traits; typedef typename out_traits::is_segmented_iterator is_out_seg_t; return (set_difference_until_exhausts) (first1, last1, first2, last2, result, comp, is_out_seg_t(), src1_cat); -#else - return (set_difference_dst_bounded) - (first1, last1, first2, last2, result, unreachable_sentinel_t(), - comp, non_segmented_iterator_tag(), src1_cat); -#endif } template @@ -211,18 +205,12 @@ BOOST_CONTAINER_FORCEINLINE segtrio set_difference_scan non_segmented_iterator_tag) { typedef sent_filter sf1; -#if !defined(BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO) typedef sent_filter sf2; return (set_difference_seg2_dispatch) (first1, last1, first2, last2, result, comp, typename sf2::seg_t(), typename sf1::cat_t()); -#else - return (set_difference_until_exhausts) - (first1, last1, first2, last2, result, comp, - non_segmented_iterator_tag(), typename sf1::cat_t()); -#endif } template diff --git a/include/boost/container/experimental/segmented_set_intersection.hpp b/include/boost/container/experimental/segmented_set_intersection.hpp index b7ab3b3..4e7374f 100644 --- a/include/boost/container/experimental/segmented_set_intersection.hpp +++ b/include/boost/container/experimental/segmented_set_intersection.hpp @@ -127,16 +127,10 @@ BOOST_CONTAINER_FORCEINLINE segtrio set_intersection_seg2 (Iter1 first1, Sent1 last1, Iter2 first2, Sent2 last2, OutIter result, Comp comp, non_segmented_iterator_tag, const Cat& src1_cat) { -#if !defined(BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO) typedef segmented_iterator_traits out_traits; typedef typename out_traits::is_segmented_iterator is_out_seg_t; return (set_intersection_until_exhausts) (first1, last1, first2, last2, result, comp, is_out_seg_t(), src1_cat); -#else - return (set_intersection_dst_bounded) - (first1, last1, first2, last2, result, unreachable_sentinel_t(), - comp, non_segmented_iterator_tag(), src1_cat); -#endif } template @@ -201,18 +195,12 @@ BOOST_CONTAINER_FORCEINLINE segtrio set_intersection_sc non_segmented_iterator_tag) { typedef sent_filter sf1; -#if !defined(BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO) typedef sent_filter sf2; return (set_intersection_seg2_dispatch) (first1, last1, first2, last2, result, comp, typename sf2::seg_t(), typename sf1::cat_t()); -#else - return (set_intersection_until_exhausts) - (first1, last1, first2, last2, result, comp, - non_segmented_iterator_tag(), typename sf1::cat_t()); -#endif } template diff --git a/include/boost/container/experimental/segmented_set_symmetric_difference.hpp b/include/boost/container/experimental/segmented_set_symmetric_difference.hpp index 4b8b201..d7e7b27 100644 --- a/include/boost/container/experimental/segmented_set_symmetric_difference.hpp +++ b/include/boost/container/experimental/segmented_set_symmetric_difference.hpp @@ -142,16 +142,10 @@ BOOST_CONTAINER_FORCEINLINE segtrio set_symmetric_differe (Iter1 first1, Sent1 last1, Iter2 first2, Sent2 last2, OutIter result, Comp comp, non_segmented_iterator_tag, const Cat& src1_cat) { -#if !defined(BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO) typedef segmented_iterator_traits out_traits; typedef typename out_traits::is_segmented_iterator is_out_seg_t; return (set_symmetric_difference_until_exhausts) (first1, last1, first2, last2, result, comp, is_out_seg_t(), src1_cat); -#else - return (set_symmetric_difference_dst_bounded) - (first1, last1, first2, last2, result, unreachable_sentinel_t(), - comp, non_segmented_iterator_tag(), src1_cat); -#endif } template @@ -216,18 +210,12 @@ BOOST_CONTAINER_FORCEINLINE segtrio set_symmetric_diffe non_segmented_iterator_tag) { typedef sent_filter sf1; -#if !defined(BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO) typedef sent_filter sf2; return (set_symmetric_difference_seg2_dispatch) (first1, last1, first2, last2, result, comp, typename sf2::seg_t(), typename sf1::cat_t()); -#else - return (set_symmetric_difference_until_exhausts) - (first1, last1, first2, last2, result, comp, - non_segmented_iterator_tag(), typename sf1::cat_t()); -#endif } template diff --git a/include/boost/container/experimental/segmented_set_union.hpp b/include/boost/container/experimental/segmented_set_union.hpp index 4a87dc4..ebef61c 100644 --- a/include/boost/container/experimental/segmented_set_union.hpp +++ b/include/boost/container/experimental/segmented_set_union.hpp @@ -130,16 +130,10 @@ BOOST_CONTAINER_FORCEINLINE segtrio set_union_seg2_dispat (Iter1 first1, Sent1 last1, Iter2 first2, Sent2 last2, OutIter result, Comp comp, non_segmented_iterator_tag, const Cat& src1_cat) { -#if !defined(BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO) typedef segmented_iterator_traits out_traits; typedef typename out_traits::is_segmented_iterator is_out_seg_t; return (set_union_until_exhausts) (first1, last1, first2, last2, result, comp, is_out_seg_t(), src1_cat); -#else - return (set_union_dst_bounded) - (first1, last1, first2, last2, result, unreachable_sentinel_t(), - comp, non_segmented_iterator_tag(), src1_cat); -#endif } template @@ -204,18 +198,12 @@ BOOST_CONTAINER_FORCEINLINE segtrio set_union_scan non_segmented_iterator_tag) { typedef sent_filter sf1; -#if !defined(BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO) typedef sent_filter sf2; return (set_union_seg2_dispatch) (first1, last1, first2, last2, result, comp, typename sf2::seg_t(), typename sf1::cat_t()); -#else - return (set_union_until_exhausts) - (first1, last1, first2, last2, result, comp, - non_segmented_iterator_tag(), typename sf1::cat_t()); -#endif } template