From 77905ab479a50ab32601fac38e11ab9852325e07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ion=20Gazta=C3=B1aga?= Date: Tue, 28 Jul 2026 13:05:02 +0200 Subject: [PATCH] Simplify partition_disjoint_bidir_ranges --- .../experimental/segmented_partition.hpp | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/include/boost/container/experimental/segmented_partition.hpp b/include/boost/container/experimental/segmented_partition.hpp index 2498ba3..472ae7f 100644 --- a/include/boost/container/experimental/segmented_partition.hpp +++ b/include/boost/container/experimental/segmented_partition.hpp @@ -157,35 +157,37 @@ segduo partition_disjoint_bidir_ranges(It f, It f_end, It l_beg, It l, P segment_iterator fs = traits::segment(f); const segment_iterator fs_end = traits::segment(f_end); local_iterator fi = traits::local(f); - local_iterator fi_end = (fs == fs_end) ? traits::local(f_end) : traits::end(fs); segment_iterator ls = traits::segment(l); const segment_iterator ls_beg = traits::segment(l_beg); local_iterator li = traits::local(l); - local_iterator li_beg = (ls == ls_beg) ? traits::local(l_beg) : traits::begin(ls); while (true) { - segduo r = - partition_disjoint_bidir_ranges(fi, fi_end, li_beg, li, pred, is_local_seg_t(), local_cat_t()); - fi = r.first; - li = r.second; + const local_iterator fi_end = (fs == fs_end) ? traits::local(f_end) : traits::end(fs); + const local_iterator li_beg = (ls == ls_beg) ? traits::local(l_beg) : traits::begin(ls); + { + const segduo r = + partition_disjoint_bidir_ranges(fi, fi_end, li_beg, li, pred, is_local_seg_t(), local_cat_t()); + fi = r.first; + li = r.second; + } if (fi == fi_end) { if (fs == fs_end) - return segduo(f_end, traits::compose(ls, li)); + break; ++fs; fi = traits::begin(fs); - fi_end = (fs == fs_end) ? traits::local(f_end) : traits::end(fs); } if (li == li_beg) { if (ls == ls_beg) - return segduo(traits::compose(fs, fi), l_beg); + break; --ls; li = traits::end(ls); - li_beg = (ls == ls_beg) ? traits::local(l_beg) : traits::begin(ls); } } + + return segduo(traits::compose(fs, fi), traits::compose(ls, li)); } template