diff options
Diffstat (limited to 'src/third_party/boost-1.69.0/boost/algorithm/find_backward.hpp')
-rw-r--r-- | src/third_party/boost-1.69.0/boost/algorithm/find_backward.hpp | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/src/third_party/boost-1.69.0/boost/algorithm/find_backward.hpp b/src/third_party/boost-1.69.0/boost/algorithm/find_backward.hpp new file mode 100644 index 00000000000..66901a1471f --- /dev/null +++ b/src/third_party/boost-1.69.0/boost/algorithm/find_backward.hpp @@ -0,0 +1,97 @@ +/* + Copyright (c) T. Zachary Laine 2018. + + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE10.txt or copy at http://www.boost.org/LICENSE10.txt) +*/ +#ifndef BOOST_ALGORITHM_FIND_BACKWARD_HPP +#define BOOST_ALGORITHM_FIND_BACKWARD_HPP + +#include <boost/config.hpp> +#include <boost/range/begin.hpp> +#include <boost/range/end.hpp> + +#include <utility> + + +namespace boost { namespace algorithm { + +template<typename BidiIter, typename T> +BOOST_CXX14_CONSTEXPR +BidiIter find_backward(BidiIter first, BidiIter last, const T & x) +{ + BidiIter it = last; + while (it != first) { + if (*--it == x) + return it; + } + return last; +} + +template<typename Range, typename T> +BOOST_CXX14_CONSTEXPR +typename boost::range_iterator<Range>::type find_backward(Range & range, const T & x) +{ + return ::boost::algorithm::find_backward(boost::begin(range), boost::end(range), x); +} + +template<typename BidiIter, typename T> +BOOST_CXX14_CONSTEXPR +BidiIter find_not_backward(BidiIter first, BidiIter last, const T & x) +{ + BidiIter it = last; + while (it != first) { + if (*--it != x) + return it; + } + return last; +} + +template<typename Range, typename T> +BOOST_CXX14_CONSTEXPR +typename boost::range_iterator<Range>::type find_not_backward(Range & range, const T & x) +{ + return ::boost::algorithm::find_not_backward(boost::begin(range), boost::end(range), x); +} + +template<typename BidiIter, typename Pred> +BOOST_CXX14_CONSTEXPR +BidiIter find_if_backward(BidiIter first, BidiIter last, Pred p) +{ + BidiIter it = last; + while (it != first) { + if (p(*--it)) + return it; + } + return last; +} + +template<typename Range, typename Pred> +BOOST_CXX14_CONSTEXPR +typename boost::range_iterator<Range>::type find_if_backward(Range & range, Pred p) +{ + return ::boost::algorithm::find_if_backward(boost::begin(range), boost::end(range), p); +} + +template<typename BidiIter, typename Pred> +BOOST_CXX14_CONSTEXPR +BidiIter find_if_not_backward(BidiIter first, BidiIter last, Pred p) +{ + BidiIter it = last; + while (it != first) { + if (!p(*--it)) + return it; + } + return last; +} + +template<typename Range, typename Pred> +BOOST_CXX14_CONSTEXPR +typename boost::range_iterator<Range>::type find_if_not_backward(Range & range, Pred p) +{ + return ::boost::algorithm::find_if_not_backward(boost::begin(range), boost::end(range), p); +} + +}} // namespace boost and algorithm + +#endif // BOOST_ALGORITHM_FIND_BACKWARD_HPP |