-
Notifications
You must be signed in to change notification settings - Fork 9
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
boost update (boost: 1.55.0 gcc: 4.7.3)
- Loading branch information
jk3064
committed
Dec 24, 2013
1 parent
851eb81
commit 9dea8c4
Showing
1,128 changed files
with
61,760 additions
and
13,275 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
/* | ||
Copyright (c) Marshall Clow 2008-2012. | ||
Distributed under the Boost Software License, Version 1.0. (See accompanying | ||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | ||
*/ | ||
|
||
/// \file equal.hpp | ||
/// \brief Test ranges to if they are equal | ||
/// \author Marshall Clow | ||
|
||
#ifndef BOOST_ALGORITHM_EQUAL_HPP | ||
#define BOOST_ALGORITHM_EQUAL_HPP | ||
|
||
#include <algorithm> // for std::equal | ||
#include <functional> // for std::equal_to | ||
|
||
namespace boost { namespace algorithm { | ||
|
||
namespace detail { | ||
|
||
template <class T1, class T2> | ||
struct eq : public std::binary_function<T1, T2, bool> { | ||
bool operator () ( const T1& v1, const T2& v2 ) const { return v1 == v2 ;} | ||
}; | ||
|
||
template <class RandomAccessIterator1, class RandomAccessIterator2, class BinaryPredicate> | ||
bool equal ( RandomAccessIterator1 first1, RandomAccessIterator1 last1, | ||
RandomAccessIterator2 first2, RandomAccessIterator2 last2, BinaryPredicate pred, | ||
std::random_access_iterator_tag, std::random_access_iterator_tag ) | ||
{ | ||
// Random-access iterators let is check the sizes in constant time | ||
if ( std::distance ( first1, last1 ) != std::distance ( first2, last2 )) | ||
return false; | ||
// If we know that the sequences are the same size, the original version is fine | ||
return std::equal ( first1, last1, first2, pred ); | ||
} | ||
|
||
template <class InputIterator1, class InputIterator2, class BinaryPredicate> | ||
bool equal ( InputIterator1 first1, InputIterator1 last1, | ||
InputIterator2 first2, InputIterator2 last2, BinaryPredicate pred, | ||
std::input_iterator_tag, std::input_iterator_tag ) | ||
{ | ||
for (; first1 != last1 && first2 != last2; ++first1, ++first2 ) | ||
if ( !pred(*first1, *first2 )) | ||
return false; | ||
|
||
return first1 == last1 && first2 == last2; | ||
} | ||
} | ||
|
||
/// \fn equal ( InputIterator1 first1, InputIterator1 last1, | ||
/// InputIterator2 first2, InputIterator2 last2, | ||
/// BinaryPredicate pred ) | ||
/// \return true if all elements in the two ranges are equal | ||
/// | ||
/// \param first1 The start of the first range. | ||
/// \param last1 One past the end of the first range. | ||
/// \param first2 The start of the second range. | ||
/// \param last2 One past the end of the second range. | ||
/// \param pred A predicate for comparing the elements of the ranges | ||
template <class InputIterator1, class InputIterator2, class BinaryPredicate> | ||
bool equal ( InputIterator1 first1, InputIterator1 last1, | ||
InputIterator2 first2, InputIterator2 last2, BinaryPredicate pred ) | ||
{ | ||
return boost::algorithm::detail::equal ( | ||
first1, last1, first2, last2, pred, | ||
typename std::iterator_traits<InputIterator1>::iterator_category (), | ||
typename std::iterator_traits<InputIterator2>::iterator_category ()); | ||
} | ||
|
||
/// \fn equal ( InputIterator1 first1, InputIterator1 last1, | ||
/// InputIterator2 first2, InputIterator2 last2 ) | ||
/// \return true if all elements in the two ranges are equal | ||
/// | ||
/// \param first1 The start of the first range. | ||
/// \param last1 One past the end of the first range. | ||
/// \param first2 The start of the second range. | ||
/// \param last2 One past the end of the second range. | ||
template <class InputIterator1, class InputIterator2> | ||
bool equal ( InputIterator1 first1, InputIterator1 last1, | ||
InputIterator2 first2, InputIterator2 last2 ) | ||
{ | ||
return boost::algorithm::detail::equal ( | ||
first1, last1, first2, last2, | ||
boost::algorithm::detail::eq< | ||
typename std::iterator_traits<InputIterator1>::value_type, | ||
typename std::iterator_traits<InputIterator2>::value_type> (), | ||
typename std::iterator_traits<InputIterator1>::iterator_category (), | ||
typename std::iterator_traits<InputIterator2>::iterator_category ()); | ||
} | ||
|
||
// There are already range-based versions of these. | ||
|
||
}} // namespace boost and algorithm | ||
|
||
#endif // BOOST_ALGORITHM_EQUAL_HPP |
Oops, something went wrong.