From e2ed5892c2f3b250c26496137cb1b8be5b8f3596 Mon Sep 17 00:00:00 2001 From: Jeremiah Willcock Date: Tue, 29 Mar 2011 19:07:16 +0000 Subject: [PATCH] Merged more fixes from trunk; added is_sorted.hpp because that is needed for BGL fixes [SVN r70704] --- include/boost/detail/is_sorted.hpp | 56 ++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 include/boost/detail/is_sorted.hpp diff --git a/include/boost/detail/is_sorted.hpp b/include/boost/detail/is_sorted.hpp new file mode 100644 index 0000000..5ab32e5 --- /dev/null +++ b/include/boost/detail/is_sorted.hpp @@ -0,0 +1,56 @@ +/*============================================================================== + Copyright (c) 2010-2011 Bryce Lelbach + + 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) +==============================================================================*/ + +#ifndef BOOST_DETAIL_SORTED_HPP +#define BOOST_DETAIL_SORTED_HPP + +#include + +#include + +namespace boost { +namespace detail { + +template +inline Iterator is_sorted_until (Iterator first, Iterator last, Comp c) { + if (first == last) + return last; + + Iterator it = first; ++it; + + for (; it != last; first = it, ++it) + if (c(*it, *first)) + return it; + + return it; +} + +template +inline Iterator is_sorted_until (Iterator first, Iterator last) { + typedef typename boost::detail::iterator_traits::value_type + value_type; + + typedef std::less c; + + return ::boost::detail::is_sorted_until(first, last, c()); +} + +template +inline bool is_sorted (Iterator first, Iterator last, Comp c) { + return ::boost::detail::is_sorted_until(first, last, c) == last; +} + +template +inline bool is_sorted (Iterator first, Iterator last) { + return ::boost::detail::is_sorted_until(first, last) == last; +} + +} // detail +} // boost + +#endif // BOOST_DETAIL_SORTED_HPP +