diff options
Diffstat (limited to 'boost/detail/is_sorted.hpp')
-rw-r--r-- | boost/detail/is_sorted.hpp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/boost/detail/is_sorted.hpp b/boost/detail/is_sorted.hpp new file mode 100644 index 0000000000..5ab32e5c59 --- /dev/null +++ b/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 <boost/detail/iterator.hpp> + +#include <functional> + +namespace boost { +namespace detail { + +template<class Iterator, class Comp> +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<class Iterator> +inline Iterator is_sorted_until (Iterator first, Iterator last) { + typedef typename boost::detail::iterator_traits<Iterator>::value_type + value_type; + + typedef std::less<value_type> c; + + return ::boost::detail::is_sorted_until(first, last, c()); +} + +template<class Iterator, class Comp> +inline bool is_sorted (Iterator first, Iterator last, Comp c) { + return ::boost::detail::is_sorted_until(first, last, c) == last; +} + +template<class Iterator> +inline bool is_sorted (Iterator first, Iterator last) { + return ::boost::detail::is_sorted_until(first, last) == last; +} + +} // detail +} // boost + +#endif // BOOST_DETAIL_SORTED_HPP + |