Re: [PATCH WIP 2/2] libstdc++: Optimize ranges::distance for segmented iterators [PR123211]

Patrick Palka <[email protected]>
Newsgroups gmane.comp.gcc.patches,gmane.comp.gcc.libstdc++.devel
Message-ID <79c20e08-63de-5210-c5ba-7958c7ae79c3@idea>
Hi,

On Tue, 14 Jul 2026, Yuao Ma wrote:

> Hi!
> 
> On Tue, Jul 14, 2026 at 12:30 PM Patrick Palka <[email protected]> wrote:
> >
> > For segmented iterators, ranges::distance is equivalent to the sum of
> > ranges::distance of each of its segments.
> >
> >         PR libstdc++/123211
> >
> > libstdc++-v3/ChangeLog:
> >
> >         * include/bits/ranges_base.h (__distance_fn::operator()): For
> >         the non-sized-sentinel overload,
> > ---
> >  libstdc++-v3/include/bits/ranges_base.h | 10 ++++++++++
> >  1 file changed, 10 insertions(+)
> >
> > diff --git a/libstdc++-v3/include/bits/ranges_base.h b/libstdc++-v3/include/bits/ranges_base.h
> > index ce1c40fc17f6..7f169feaa6b1 100644
> > --- a/libstdc++-v3/include/bits/ranges_base.h
> > +++ b/libstdc++-v3/include/bits/ranges_base.h
> > @@ -994,6 +994,16 @@ namespace ranges
> >        constexpr iter_difference_t<_It>
> >        operator()[[nodiscard]](_It __first, _Sent __last) const
> >        {
> > +       if constexpr (__segmented_iterator<_It> && same_as<_It, _Sent>)
> > +         {
> > +           iter_difference_t<_It> __n = 0;
> > +           std::__for_each_segment(__first, __last, [this, &__n](auto __first, auto __last) {
> > +             __n += iter_difference_t<_It>(this->operator()(__first, __last));
> > +             return __last;
> > +           });
> > +           return __n;
> > +         }
> > +
> >         iter_difference_t<_It> __n = 0;
> >         while (__first != __last)
> >           {
> > --
> > 2.55.0.141.g55526a1826
> >
> 
> Great to see this optimization into libstdc++! Beyond
> ranges::distance, I think there are more algorithms we can optimize
> for segmented iterators. I helped implement some of these for libc++,
> and I'd love to contribute similar optimizations to libstdc++ too!

That'd be great!  I don't have any plans to implement more optimizations
myself but would happy to review.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.