From 291e430a393087e35cb57780ea3849fcc8e19d8c Mon Sep 17 00:00:00 2001 From: Casey Carter Date: Mon, 6 Mar 2023 23:22:33 -0800 Subject: [PATCH 1/2] Use `_Rewrap_iterator` consistently ... for all range algorithms operating on `forward_range`s. --- stl/inc/algorithm | 27 +++++++++------------------ stl/inc/xutility | 14 ++++++-------- 2 files changed, 15 insertions(+), 26 deletions(-) diff --git a/stl/inc/algorithm b/stl/inc/algorithm index 7fc01e3cc4a..a6a2d7bce12 100644 --- a/stl/inc/algorithm +++ b/stl/inc/algorithm @@ -6927,9 +6927,7 @@ namespace ranges { const auto _Count = _RANGES distance(_Range); auto _UResult = _RANGES _Lower_bound_unchecked(_Ubegin(_Range), _Count, _Val, _Pass_fn(_Pred), _Pass_fn(_Proj)); - auto _Result = _RANGES begin(_Range); - _Seek_wrapped(_Result, _STD move(_UResult)); - return _Result; + return _Rewrap_iterator(_Range, _STD move(_UResult)); } }; @@ -6982,9 +6980,7 @@ namespace ranges { const auto _Count = _RANGES distance(_Range); auto _UResult = _RANGES _Upper_bound_unchecked(_Ubegin(_Range), _Count, _Val, _Pass_fn(_Pred), _Pass_fn(_Proj)); - auto _Result = _RANGES begin(_Range); - _Seek_wrapped(_Result, _STD move(_UResult)); - return _Result; + return _Rewrap_iterator(_Range, _STD move(_UResult)); } }; @@ -9928,13 +9924,10 @@ namespace ranges { indirect_strict_weak_order, _Pj>> _Pr = ranges::less> _NODISCARD constexpr minmax_element_result> operator()( _Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) const { - auto _First = _RANGES begin(_Range); - auto _UResult = _Minmax_element_fwd_unchecked(_RANGES _Unwrap_range_iter<_Rng>(_STD move(_First)), - _RANGES _Uend(_Range), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj)); - _STD _Seek_wrapped(_First, _STD move(_UResult.min)); - auto _Second = _First; - _STD _Seek_wrapped(_Second, _STD move(_UResult.max)); - return {_STD move(_First), _STD move(_Second)}; + auto _UResult = _Minmax_element_fwd_unchecked( + _RANGES _Ubegin(_Range), _RANGES _Uend(_Range), _STD _Pass_fn(_Pred), _STD _Pass_fn(_Proj)); + return { + _Rewrap_iterator(_Range, _STD move(_UResult.min)), _Rewrap_iterator(_Range, _STD move(_UResult.max))}; } private: @@ -10523,11 +10516,9 @@ namespace ranges { template , _Pj>> _Pr = ranges::less> _NODISCARD constexpr borrowed_iterator_t<_Rng> operator()(_Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) const { - auto _First = _RANGES begin(_Range); - auto _UFirst = _RANGES _Is_sorted_until_unchecked( - _Unwrap_range_iter<_Rng>(_First), _Uend(_Range), _Pass_fn(_Pred), _Pass_fn(_Proj)); - _Seek_wrapped(_First, _STD move(_UFirst)); - return _First; + auto _UResult = _RANGES _Is_sorted_until_unchecked( + _Ubegin(_Range), _Uend(_Range), _Pass_fn(_Pred), _Pass_fn(_Proj)); + return _Rewrap_iterator(_Range, _STD move(_UResult)); } }; diff --git a/stl/inc/xutility b/stl/inc/xutility index 74782010400..3db7b17a5cd 100644 --- a/stl/inc/xutility +++ b/stl/inc/xutility @@ -6684,10 +6684,9 @@ namespace ranges { template , _Pj>> _Pr = ranges::less> _NODISCARD constexpr borrowed_iterator_t<_Rng> operator()(_Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) const { - auto _First = _RANGES begin(_Range); - _Seek_wrapped(_First, _RANGES _Max_element_unchecked(_Unwrap_range_iter<_Rng>(_STD move(_First)), - _Uend(_Range), _Pass_fn(_Pred), _Pass_fn(_Proj))); - return _First; + auto _UResult = + _RANGES _Max_element_unchecked(_Ubegin(_Range), _Uend(_Range), _Pass_fn(_Pred), _Pass_fn(_Proj)); + return _Rewrap_iterator(_Range, _STD move(_UResult)); } }; @@ -6879,10 +6878,9 @@ namespace ranges { template , _Pj>> _Pr = ranges::less> _NODISCARD constexpr borrowed_iterator_t<_Rng> operator()(_Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) const { - auto _First = _RANGES begin(_Range); - _Seek_wrapped(_First, _RANGES _Min_element_unchecked(_Unwrap_range_iter<_Rng>(_STD move(_First)), - _Uend(_Range), _Pass_fn(_Pred), _Pass_fn(_Proj))); - return _First; + auto _UResult = + _RANGES _Min_element_unchecked(_Ubegin(_Range), _Uend(_Range), _Pass_fn(_Pred), _Pass_fn(_Proj)); + return _Rewrap_iterator(_Range, _STD move(_UResult)); } }; From 169d0e30d2daf2358c94b8220ef609ddb106f5ab Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Tue, 7 Mar 2023 00:03:19 -0800 Subject: [PATCH 2/2] clang-format --- stl/inc/algorithm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stl/inc/algorithm b/stl/inc/algorithm index a6a2d7bce12..e32ffd90ddc 100644 --- a/stl/inc/algorithm +++ b/stl/inc/algorithm @@ -10516,8 +10516,8 @@ namespace ranges { template , _Pj>> _Pr = ranges::less> _NODISCARD constexpr borrowed_iterator_t<_Rng> operator()(_Rng&& _Range, _Pr _Pred = {}, _Pj _Proj = {}) const { - auto _UResult = _RANGES _Is_sorted_until_unchecked( - _Ubegin(_Range), _Uend(_Range), _Pass_fn(_Pred), _Pass_fn(_Proj)); + auto _UResult = + _RANGES _Is_sorted_until_unchecked(_Ubegin(_Range), _Uend(_Range), _Pass_fn(_Pred), _Pass_fn(_Proj)); return _Rewrap_iterator(_Range, _STD move(_UResult)); } };