22 #ifndef ABSL_ALGORITHM_ALGORITHM_H_
23 #define ABSL_ALGORITHM_ALGORITHM_H_
27 #include <type_traits>
29 #include "absl/base/config.h"
34 namespace algorithm_internal {
38 template <
typename T,
typename U>
44 template <
typename InputIter1,
typename InputIter2,
typename Pred>
45 bool EqualImpl(InputIter1 first1, InputIter1 last1, InputIter2 first2,
46 InputIter2 last2, Pred pred, std::input_iterator_tag,
47 std::input_iterator_tag) {
49 if (first1 == last1)
return first2 == last2;
50 if (first2 == last2)
return false;
51 if (!pred(*first1, *first2))
return false;
57 template <
typename InputIter1,
typename InputIter2,
typename Pred>
58 bool EqualImpl(InputIter1 first1, InputIter1 last1, InputIter2 first2,
59 InputIter2 last2, Pred&& pred, std::random_access_iterator_tag,
60 std::random_access_iterator_tag) {
61 return (last1 - first1 == last2 - first2) &&
62 std::equal(first1, last1, first2, std::forward<Pred>(pred));
68 template <
typename InputIter1,
typename InputIter2>
69 bool EqualImpl(InputIter1 first1, InputIter1 last1, InputIter2 first2,
71 std::random_access_iterator_tag,
72 std::random_access_iterator_tag) {
73 return (last1 - first1 == last2 - first2) &&
74 std::equal(first1, last1, first2);
77 template <
typename It>
82 template <
typename It>
103 template <
typename InputIter1,
typename InputIter2,
typename Pred>
104 bool equal(InputIter1 first1, InputIter1 last1, InputIter2 first2,
105 InputIter2 last2, Pred&& pred) {
107 first1, last1, first2, last2, std::forward<Pred>(pred),
108 typename std::iterator_traits<InputIter1>::iterator_category{},
109 typename std::iterator_traits<InputIter2>::iterator_category{});
114 template <
typename InputIter1,
typename InputIter2>
115 bool equal(InputIter1 first1, InputIter1 last1, InputIter2 first2,
130 template <
typename InputIterator,
typename EqualityComparable>
132 const EqualityComparable&
value) {
147 template <
typename ForwardIterator>
148 ForwardIterator
rotate(ForwardIterator
first, ForwardIterator middle,
149 ForwardIterator last) {
159 #endif // ABSL_ALGORITHM_ALGORITHM_H_