root / tmp / org.txm.statsengine.r.core.win32 / res / win32 / library / BH / include / boost / algorithm / cxx11 / all_of.hpp @ 2486
History  View  Annotate  Download (2.8 kB)
1 
/*


2 
Copyright (c) Marshall Clow 20082012.

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 all_of.hpp

9 
/// \brief Test ranges to see if all elements match a value or predicate.

10 
/// \author Marshall Clow

11  
12 
#ifndef BOOST_ALGORITHM_ALL_OF_HPP

13 
#define BOOST_ALGORITHM_ALL_OF_HPP

14  
15 
#include <algorithm> // for std::all_of, if available 
16 
#include <boost/range/begin.hpp> 
17 
#include <boost/range/end.hpp> 
18  
19 
namespace boost { namespace algorithm { 
20  
21 
/// \fn all_of ( InputIterator first, InputIterator last, Predicate p )

22 
/// \return true if all elements in [first, last) satisfy the predicate 'p'

23 
/// \note returns true on an empty range

24 
///

25 
/// \param first The start of the input sequence

26 
/// \param last One past the end of the input sequence

27 
/// \param p A predicate for testing the elements of the sequence

28 
///

29 
/// \note This function is part of the C++2011 standard library.

30 
/// We will use the standard one if it is available,

31 
/// otherwise we have our own implementation.

32 
template<typename InputIterator, typename Predicate> 
33 
bool all_of ( InputIterator first, InputIterator last, Predicate p )

34 
{ 
35 
for ( ; first != last; ++first )

36 
if ( !p(*first))

37 
return false; 
38 
return true; 
39 
} 
40  
41 
/// \fn all_of ( const Range &r, Predicate p )

42 
/// \return true if all elements in the range satisfy the predicate 'p'

43 
/// \note returns true on an empty range

44 
///

45 
/// \param r The input range

46 
/// \param p A predicate for testing the elements of the range

47 
///

48 
template<typename Range, typename Predicate> 
49 
bool all_of ( const Range &r, Predicate p ) 
50 
{ 
51 
return boost::algorithm::all_of ( boost::begin (r), boost::end (r), p );

52 
} 
53  
54 
/// \fn all_of_equal ( InputIterator first, InputIterator last, const T &val )

55 
/// \return true if all elements in [first, last) are equal to 'val'

56 
/// \note returns true on an empty range

57 
///

58 
/// \param first The start of the input sequence

59 
/// \param last One past the end of the input sequence

60 
/// \param val A value to compare against

61 
///

62 
template<typename InputIterator, typename T> 
63 
bool all_of_equal ( InputIterator first, InputIterator last, const T &val ) 
64 
{ 
65 
for ( ; first != last; ++first )

66 
if ( val != *first )

67 
return false; 
68 
return true; 
69 
} 
70  
71 
/// \fn all_of_equal ( const Range &r, const T &val )

72 
/// \return true if all elements in the range are equal to 'val'

73 
/// \note returns true on an empty range

74 
///

75 
/// \param r The input range

76 
/// \param val A value to compare against

77 
///

78 
template<typename Range, typename T> 
79 
bool all_of_equal ( const Range &r, const T &val ) 
80 
{ 
81 
return boost::algorithm::all_of_equal ( boost::begin (r), boost::end (r), val );

82 
} 
83  
84 
}} // namespace boost and algorithm

85  
86 
#endif // BOOST_ALGORITHM_ALL_OF_HPP 