1212#ifndef BOOST_ALGORITHM_EQUAL_HPP
1313#define BOOST_ALGORITHM_EQUAL_HPP
1414
15- #include < algorithm> // for std::equal
16- #include < functional> // for std::equal_to
15+ #include < algorithm> // for std::equal
16+ #include < functional> // for std::equal_to
1717
1818namespace boost { namespace algorithm {
1919
2020namespace detail {
2121
22- template <class T1 , class T2 >
23- struct eq : public std ::binary_function<T1, T2, bool > {
24- bool operator () ( const T1& v1, const T2& v2 ) const { return v1 == v2 ;}
25- };
26-
27- template <class RandomAccessIterator1 , class RandomAccessIterator2 , class BinaryPredicate >
28- bool equal ( RandomAccessIterator1 first1, RandomAccessIterator1 last1,
29- RandomAccessIterator2 first2, RandomAccessIterator2 last2, BinaryPredicate pred,
30- std::random_access_iterator_tag, std::random_access_iterator_tag )
31- {
32- // Random-access iterators let is check the sizes in constant time
33- if ( std::distance ( first1, last1 ) != std::distance ( first2, last2 ))
34- return false ;
35- // If we know that the sequences are the same size, the original version is fine
36- return std::equal ( first1, last1, first2, pred );
37- }
22+ template <class T1 , class T2 >
23+ struct eq : public std ::binary_function<T1, T2, bool > {
24+ bool operator () ( const T1& v1, const T2& v2 ) const { return v1 == v2 ;}
25+ };
26+
27+ template <class RandomAccessIterator1 , class RandomAccessIterator2 , class BinaryPredicate >
28+ bool equal ( RandomAccessIterator1 first1, RandomAccessIterator1 last1,
29+ RandomAccessIterator2 first2, RandomAccessIterator2 last2, BinaryPredicate pred,
30+ std::random_access_iterator_tag, std::random_access_iterator_tag )
31+ {
32+ // Random-access iterators let is check the sizes in constant time
33+ if ( std::distance ( first1, last1 ) != std::distance ( first2, last2 ))
34+ return false ;
35+ // If we know that the sequences are the same size, the original version is fine
36+ return std::equal ( first1, last1, first2, pred );
37+ }
3838
39- template <class InputIterator1 , class InputIterator2 , class BinaryPredicate >
40- bool equal ( InputIterator1 first1, InputIterator1 last1,
41- InputIterator2 first2, InputIterator2 last2, BinaryPredicate pred,
42- std::input_iterator_tag, std::input_iterator_tag )
43- {
44- for (; first1 != last1 && first2 != last2; ++first1, ++first2 )
45- if ( !pred (*first1, *first2 ))
46- return false ;
39+ template <class InputIterator1 , class InputIterator2 , class BinaryPredicate >
40+ bool equal ( InputIterator1 first1, InputIterator1 last1,
41+ InputIterator2 first2, InputIterator2 last2, BinaryPredicate pred,
42+ std::input_iterator_tag, std::input_iterator_tag )
43+ {
44+ for (; first1 != last1 && first2 != last2; ++first1, ++first2 )
45+ if ( !pred (*first1, *first2 ))
46+ return false ;
4747
48- return first1 == last1 && first2 == last2;
49- }
48+ return first1 == last1 && first2 == last2;
49+ }
5050}
5151
5252// / \fn equal ( InputIterator1 first1, InputIterator1 last1,
@@ -63,10 +63,10 @@ template <class InputIterator1, class InputIterator2, class BinaryPredicate>
6363bool equal ( InputIterator1 first1, InputIterator1 last1,
6464 InputIterator2 first2, InputIterator2 last2, BinaryPredicate pred )
6565{
66- return boost::algorithm::detail::equal (
67- first1, last1, first2, last2, pred,
68- typename std::iterator_traits<InputIterator1>::iterator_category (),
69- typename std::iterator_traits<InputIterator2>::iterator_category ());
66+ return boost::algorithm::detail::equal (
67+ first1, last1, first2, last2, pred,
68+ typename std::iterator_traits<InputIterator1>::iterator_category (),
69+ typename std::iterator_traits<InputIterator2>::iterator_category ());
7070}
7171
7272// / \fn equal ( InputIterator1 first1, InputIterator1 last1,
@@ -81,16 +81,16 @@ template <class InputIterator1, class InputIterator2>
8181bool equal ( InputIterator1 first1, InputIterator1 last1,
8282 InputIterator2 first2, InputIterator2 last2 )
8383{
84- return boost::algorithm::detail::equal (
85- first1, last1, first2, last2,
86- boost::algorithm::detail::eq<
87- typename std::iterator_traits<InputIterator1>::value_type,
88- typename std::iterator_traits<InputIterator2>::value_type> (),
89- typename std::iterator_traits<InputIterator1>::iterator_category (),
90- typename std::iterator_traits<InputIterator2>::iterator_category ());
84+ return boost::algorithm::detail::equal (
85+ first1, last1, first2, last2,
86+ boost::algorithm::detail::eq<
87+ typename std::iterator_traits<InputIterator1>::value_type,
88+ typename std::iterator_traits<InputIterator2>::value_type> (),
89+ typename std::iterator_traits<InputIterator1>::iterator_category (),
90+ typename std::iterator_traits<InputIterator2>::iterator_category ());
9191}
9292
93- // There are already range-based versions of these.
93+ // There are already range-based versions of these.
9494
9595}} // namespace boost and algorithm
9696
0 commit comments