Statistics
| Revision:

root / tmp / org.txm.statsengine.r.core.win32 / res / win32 / library / BH / include / boost / algorithm / cxx11 / is_partitioned.hpp @ 2486

History | View | Annotate | Download (2 kB)

1
/* 
2
   Copyright (c) Marshall Clow 2011-2012.
3

4
   Distributed under the Boost Software License, Version 1.0. (See accompanying
5
   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6
*/
7

    
8
/// \file  is_partitioned.hpp
9
/// \brief Tell if a sequence is partitioned
10
/// \author Marshall Clow
11

    
12
#ifndef BOOST_ALGORITHM_IS_PARTITIONED_HPP
13
#define BOOST_ALGORITHM_IS_PARTITIONED_HPP
14

    
15
#include <algorithm>    // for std::is_partitioned, if available
16

    
17
#include <boost/range/begin.hpp>
18
#include <boost/range/end.hpp>
19

    
20
namespace boost { namespace algorithm {
21

    
22
/// \fn is_partitioned ( InputIterator first, InputIterator last, UnaryPredicate p )
23
/// \brief Tests to see if a sequence is partitioned according to a predicate
24
/// 
25
/// \param first    The start of the input sequence
26
/// \param last     One past the end of the input sequence
27
/// \param p        The predicate to test the values with
28
/// \note           This function is part of the C++2011 standard library.
29
///  We will use the standard one if it is available, 
30
///  otherwise we have our own implementation.
31
template <typename InputIterator, typename UnaryPredicate>
32
bool is_partitioned ( InputIterator first, InputIterator last, UnaryPredicate p )
33
{
34
//  Run through the part that satisfy the predicate
35
    for ( ; first != last; ++first )
36
        if ( !p (*first))
37
            break;
38
//  Now the part that does not satisfy the predicate
39
    for ( ; first != last; ++first )
40
        if ( p (*first))
41
            return false;
42
    return true;
43
}
44

    
45
/// \fn is_partitioned ( const Range &r, UnaryPredicate p )
46
/// \brief Generates an increasing sequence of values, and stores them in the input Range.
47
/// 
48
/// \param r        The input range
49
/// \param p        The predicate to test the values with
50
///
51
template <typename Range, typename UnaryPredicate>
52
bool is_partitioned ( const Range &r, UnaryPredicate p )
53
{
54
    return boost::algorithm::is_partitioned (boost::begin(r), boost::end(r), p);
55
}
56

    
57

    
58
}}
59

    
60
#endif  // BOOST_ALGORITHM_IS_PARTITIONED_HPP