diff options
author | Abseil Team <absl-team@google.com> | 2017-12-20T20·34-0800 |
---|---|---|
committer | Xiaoyi Zhang <zhangxy988@gmail.com> | 2017-12-20T22·03-0500 |
commit | ff7045647330f5dc21725a42456091207f3eecd5 (patch) | |
tree | cae476d37e272b1a1d48172f07c4a7229a027fea /absl/algorithm/algorithm.h | |
parent | 4972c72c5cf2f27e2a0846ce9ff5d377d3f2b7af (diff) |
Changes imported from Abseil "staging" branch:
- 20f4e7133d695e9a05e13ebdfd4d78da310b42b5 Remove the warning supressions -Wno-documentation and by Derek Mauro <dmauro@google.com> - e1bde85c0571673b1e7a88b9d45a393606ba7e6c Changed the optimized version of strings_internal::JoinAl... by Abseil Team <absl-team@google.com> - 746e6716b4c15be61547670d68d25a1c850d3954 Add missing absl:: qualification. by Alex Strelnikov <strel@google.com> - 4e5c18c488cbd49ca72b02911cf22d830d5a7f16 Internals change: Remove the ability to pass a custom met... by Greg Falcon <gfalcon@google.com> - 65d58107a5730d4b6468bbffc72bea2f980af826 Moved most common character case (ascii printable) out of... by Abseil Team <absl-team@google.com> - f031331cc55a3d57b9110e12c7cbe50ac3e2a04f Add missing copyright headers to a few source files. by Greg Falcon <gfalcon@google.com> - 6035a77af6fa951c536b42df4c710d16d1817aec Enable libstdc++'s memcmp optimization in absl::equal for... by Abseil Team <absl-team@google.com> - 73a665a4a10781e5d89f75a876ece7ad859f4116 Fix minor spelling error "hexidecimal". by Abseil Team <absl-team@google.com> GitOrigin-RevId: 20f4e7133d695e9a05e13ebdfd4d78da310b42b5 Change-Id: Id8c18ebd331d096935052a6ab259ebe0e2ef13ae
Diffstat (limited to 'absl/algorithm/algorithm.h')
-rw-r--r-- | absl/algorithm/algorithm.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/absl/algorithm/algorithm.h b/absl/algorithm/algorithm.h index 341b68b02038..3d6586439fe3 100644 --- a/absl/algorithm/algorithm.h +++ b/absl/algorithm/algorithm.h @@ -59,6 +59,18 @@ bool EqualImpl(InputIter1 first1, InputIter1 last1, InputIter2 first2, std::equal(first1, last1, first2, std::forward<Pred>(pred)); } +// When we are using our own internal predicate that just applies operator==, we +// forward to the non-predicate form of std::equal. This enables an optimization +// in libstdc++ that can result in std::memcmp being used for integer types. +template <typename InputIter1, typename InputIter2> +bool EqualImpl(InputIter1 first1, InputIter1 last1, InputIter2 first2, + InputIter2 last2, algorithm_internal::EqualTo /* unused */, + std::random_access_iterator_tag, + std::random_access_iterator_tag) { + return (last1 - first1 == last2 - first2) && + std::equal(first1, last1, first2); +} + template <typename It> It RotateImpl(It first, It middle, It last, std::true_type) { return std::rotate(first, middle, last); |