diff --git a/include/boost/algorithm/find_backward.hpp b/include/boost/algorithm/find_backward.hpp new file mode 100644 index 0000000..6bf102c --- /dev/null +++ b/include/boost/algorithm/find_backward.hpp @@ -0,0 +1,62 @@ +/* + 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 +#include + + +namespace boost { namespace algorithm { + +template +BOOST_CXX14_CONSTEXPR BidiIter find_backward(BidiIter first, BidiIter last, T const & x) +{ + auto it = last; + while (it != first) { + if (*--it == x) + return it; + } + return last; +} + +template +BOOST_CXX14_CONSTEXPR BidiIter find_not_backward(BidiIter first, BidiIter last, T const & x) +{ + auto it = last; + while (it != first) { + if (*--it != x) + return it; + } + return last; +} + +template +BOOST_CXX14_CONSTEXPR BidiIter find_if_backward(BidiIter first, BidiIter last, Pred p) +{ + auto it = last; + while (it != first) { + if (p(*--it)) + return it; + } + return last; +} + +template +BOOST_CXX14_CONSTEXPR BidiIter find_if_not_backward(BidiIter first, BidiIter last, Pred p) +{ + auto it = last; + while (it != first) { + if (!p(*--it)) + return it; + } + return last; +} + +}} // namespace boost and algorithm + +#endif // BOOST_ALGORITHM_FIND_BACKWARD_HPP diff --git a/include/boost/algorithm/find_not.hpp b/include/boost/algorithm/find_not.hpp new file mode 100644 index 0000000..420372b --- /dev/null +++ b/include/boost/algorithm/find_not.hpp @@ -0,0 +1,28 @@ +/* + 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_NOT_HPP +#define BOOST_ALGORITHM_FIND_NOT_HPP + +#include +#include + + +namespace boost { namespace algorithm { + +template +BOOST_CXX14_CONSTEXPR InputIter find_not(InputIter first, Sentinel last, T const & x) +{ + for (; first != last; ++first) { + if (*first != x) + break; + } + return first; +} + +}} // namespace boost and algorithm + +#endif // BOOST_ALGORITHM_FIND_NOT_HPP