/Src/Dependencies/Boost/boost/range/algorithm/max_element.hpp

http://hadesmem.googlecode.com/ · C++ Header · 115 lines · 80 code · 13 blank · 22 comment · 0 complexity · 72967e2f0dc446b46f0cb370aa314e29 MD5 · raw file

  1. // Copyright Neil Groves 2009. Use, modification and
  2. // distribution is subject to the Boost Software License, Version
  3. // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  4. // http://www.boost.org/LICENSE_1_0.txt)
  5. //
  6. //
  7. // For more information, see http://www.boost.org/libs/range/
  8. //
  9. #ifndef BOOST_RANGE_ALGORITHM_MAX_ELEMENT_HPP_INCLUDED
  10. #define BOOST_RANGE_ALGORITHM_MAX_ELEMENT_HPP_INCLUDED
  11. #include <boost/concept_check.hpp>
  12. #include <boost/range/begin.hpp>
  13. #include <boost/range/end.hpp>
  14. #include <boost/range/concepts.hpp>
  15. #include <boost/range/detail/range_return.hpp>
  16. #include <algorithm>
  17. namespace boost
  18. {
  19. namespace range
  20. {
  21. /// \brief template function max_element
  22. ///
  23. /// range-based version of the max_element std algorithm
  24. ///
  25. /// \pre ForwardRange is a model of the ForwardRangeConcept
  26. /// \pre BinaryPredicate is a model of the BinaryPredicateConcept
  27. template<class ForwardRange>
  28. inline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
  29. max_element(ForwardRange& rng)
  30. {
  31. BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
  32. return std::max_element(boost::begin(rng), boost::end(rng));
  33. }
  34. /// \overload
  35. template<class ForwardRange>
  36. inline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type
  37. max_element(const ForwardRange& rng)
  38. {
  39. BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
  40. return std::max_element(boost::begin(rng), boost::end(rng));
  41. }
  42. /// \overload
  43. template<class ForwardRange, class BinaryPredicate>
  44. inline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
  45. max_element(ForwardRange& rng, BinaryPredicate pred)
  46. {
  47. BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
  48. return std::max_element(boost::begin(rng), boost::end(rng), pred);
  49. }
  50. /// \overload
  51. template<class ForwardRange, class BinaryPredicate>
  52. inline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type
  53. max_element(const ForwardRange& rng, BinaryPredicate pred)
  54. {
  55. BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
  56. return std::max_element(boost::begin(rng), boost::end(rng), pred);
  57. }
  58. // range_return overloads
  59. /// \overload
  60. template<range_return_value re, class ForwardRange>
  61. inline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type
  62. max_element(ForwardRange& rng)
  63. {
  64. BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
  65. return range_return<ForwardRange,re>::pack(
  66. std::max_element(boost::begin(rng), boost::end(rng)),
  67. rng);
  68. }
  69. /// \overload
  70. template<range_return_value re, class ForwardRange>
  71. inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type
  72. max_element(const ForwardRange& rng)
  73. {
  74. BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
  75. return range_return<const ForwardRange,re>::pack(
  76. std::max_element(boost::begin(rng), boost::end(rng)),
  77. rng);
  78. }
  79. /// \overload
  80. template<range_return_value re, class ForwardRange, class BinaryPredicate>
  81. inline BOOST_DEDUCED_TYPENAME range_return<ForwardRange,re>::type
  82. max_element(ForwardRange& rng, BinaryPredicate pred)
  83. {
  84. BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
  85. return range_return<ForwardRange,re>::pack(
  86. std::max_element(boost::begin(rng), boost::end(rng), pred),
  87. rng);
  88. }
  89. /// \overload
  90. template<range_return_value re, class ForwardRange, class BinaryPredicate>
  91. inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type
  92. max_element(const ForwardRange& rng, BinaryPredicate pred)
  93. {
  94. BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
  95. return range_return<const ForwardRange,re>::pack(
  96. std::max_element(boost::begin(rng), boost::end(rng), pred),
  97. rng);
  98. }
  99. } // namespace range
  100. using range::max_element;
  101. } // namespace boost
  102. #endif // include guard