-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[libc++][NFC] Remove two unused implementation details __find_end
#100685
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Thank you for submitting a Pull Request (PR) to the LLVM Project! This PR will be automatically labeled and the relevant teams will be If you wish to, you can add reviewers by using the "Reviewers" section on this page. If this is not working for you, it is probably because you do not have write If you have received no comments on your PR for a week, you can request a review If you have further questions, they may be answered by the LLVM GitHub User Guide. You can also ask questions in a comment on this PR, on the LLVM Discord or on the forums. |
@llvm/pr-subscribers-libcxx Author: Hewill Kang (hewillk) ChangesFixes #100569. Full diff: https://github.com/llvm/llvm-project/pull/100685.diff 1 Files Affected:
diff --git a/libcxx/include/__algorithm/find_end.h b/libcxx/include/__algorithm/find_end.h
index 7e08e7953534e..841e0fd509d56 100644
--- a/libcxx/include/__algorithm/find_end.h
+++ b/libcxx/include/__algorithm/find_end.h
@@ -80,109 +80,6 @@ _LIBCPP_HIDE_FROM_ABI inline _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_Iter1, _Iter1>
}
}
-template < class _IterOps,
- class _Pred,
- class _Iter1,
- class _Sent1,
- class _Iter2,
- class _Sent2,
- class _Proj1,
- class _Proj2>
-_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _Iter1 __find_end(
- _Iter1 __first1,
- _Sent1 __sent1,
- _Iter2 __first2,
- _Sent2 __sent2,
- _Pred& __pred,
- _Proj1& __proj1,
- _Proj2& __proj2,
- bidirectional_iterator_tag,
- bidirectional_iterator_tag) {
- auto __last1 = _IterOps::next(__first1, __sent1);
- auto __last2 = _IterOps::next(__first2, __sent2);
- // modeled after search algorithm (in reverse)
- if (__first2 == __last2)
- return __last1; // Everything matches an empty sequence
- _Iter1 __l1 = __last1;
- _Iter2 __l2 = __last2;
- --__l2;
- while (true) {
- // Find last element in sequence 1 that matchs *(__last2-1), with a mininum of loop checks
- while (true) {
- if (__first1 == __l1) // return __last1 if no element matches *__first2
- return __last1;
- if (std::__invoke(__pred, std::__invoke(__proj1, *--__l1), std::__invoke(__proj2, *__l2)))
- break;
- }
- // *__l1 matches *__l2, now match elements before here
- _Iter1 __m1 = __l1;
- _Iter2 __m2 = __l2;
- while (true) {
- if (__m2 == __first2) // If pattern exhausted, __m1 is the answer (works for 1 element pattern)
- return __m1;
- if (__m1 == __first1) // Otherwise if source exhaused, pattern not found
- return __last1;
-
- // if there is a mismatch, restart with a new __l1
- if (!std::__invoke(__pred, std::__invoke(__proj1, *--__m1), std::__invoke(__proj2, *--__m2))) {
- break;
- } // else there is a match, check next elements
- }
- }
-}
-
-template < class _AlgPolicy,
- class _Pred,
- class _Iter1,
- class _Sent1,
- class _Iter2,
- class _Sent2,
- class _Proj1,
- class _Proj2>
-_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _Iter1 __find_end(
- _Iter1 __first1,
- _Sent1 __sent1,
- _Iter2 __first2,
- _Sent2 __sent2,
- _Pred& __pred,
- _Proj1& __proj1,
- _Proj2& __proj2,
- random_access_iterator_tag,
- random_access_iterator_tag) {
- typedef typename iterator_traits<_Iter1>::difference_type _D1;
- auto __last1 = _IterOps<_AlgPolicy>::next(__first1, __sent1);
- auto __last2 = _IterOps<_AlgPolicy>::next(__first2, __sent2);
- // Take advantage of knowing source and pattern lengths. Stop short when source is smaller than pattern
- auto __len2 = __last2 - __first2;
- if (__len2 == 0)
- return __last1;
- auto __len1 = __last1 - __first1;
- if (__len1 < __len2)
- return __last1;
- const _Iter1 __s = __first1 + _D1(__len2 - 1); // End of pattern match can't go before here
- _Iter1 __l1 = __last1;
- _Iter2 __l2 = __last2;
- --__l2;
- while (true) {
- while (true) {
- if (__s == __l1)
- return __last1;
- if (std::__invoke(__pred, std::__invoke(__proj1, *--__l1), std::__invoke(__proj2, *__l2)))
- break;
- }
- _Iter1 __m1 = __l1;
- _Iter2 __m2 = __l2;
- while (true) {
- if (__m2 == __first2)
- return __m1;
- // no need to check range on __m1 because __s guarantees we have enough source
- if (!std::__invoke(__pred, std::__invoke(__proj1, *--__m1), std::__invoke(*--__m2))) {
- break;
- }
- }
- }
-}
-
template <class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _ForwardIterator1 __find_end_classic(
_ForwardIterator1 __first1,
|
|
Just to err on the side of caution, can you check when we stopped referencing this to ensure this was intentional? Ideally it would be in the PR description so we just have to double-check the archeology :) |
I think we stopped using @hewillk Could you add this to the PR description, and make the title clearer, e.g. by saying "[libc++][NFC] Remove no longer used internal helper |
__find_end
Thanks for the cleanup! |
@hewillk Congratulations on having your first Pull Request (PR) merged into the LLVM Project! Your changes will be combined with recent changes from other authors, then tested Please check whether problems have been caused by your change specifically, as How to do this, and the rest of the post-merge process, is covered in detail here. If your change does cause a problem, it may be reverted, or you can revert it yourself. If you don't get any reports, no action is required from you. Your changes are working as expected, well done! |
Fixes #100569.
Those two
__find_end
is no longer used after 101d1e9 (as @frederick-vs-ja informed in the comment below).After this commit,
std::find_end
will dispatch__find_end_classic
, andranges::find_end
will dispatch__find_end_impl
, which means that the two__find_end
are no longer necessary.