]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/boost/range/algorithm/min_element.hpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / boost / range / algorithm / min_element.hpp
index c966b1e522204c1e8bdd2faea69fd393aa0f3fc2..764de8b209e5c0f53134e40388e9bfe85321bfdb 100644 (file)
@@ -3,6 +3,7 @@
 //  1.0. (See accompanying file LICENSE_1_0.txt or copy at
 //  http://www.boost.org/LICENSE_1_0.txt)
 //
+// Copyright 2019 Glen Joseph Fernandes (glenjofe@gmail.com)
 //
 // For more information, see http://www.boost.org/libs/range/
 //
 #include <boost/range/begin.hpp>
 #include <boost/range/end.hpp>
 #include <boost/range/concepts.hpp>
+#include <boost/range/detail/less.hpp>
 #include <boost/range/detail/range_return.hpp>
-#include <algorithm>
 
 namespace boost
 {
     namespace range
     {
 
+namespace detail
+{
+
+template<typename Iterator, class Predicate>
+inline Iterator
+min_element(Iterator first, Iterator last, Predicate comp)
+{
+    if (first == last) {
+        return last;
+    }
+    Iterator result = first;
+    while (++first != last) {
+        if (comp(*first, *result)) {
+            result = first;
+        }
+    }
+    return result;
+}
+
+} // namespace detail
+
 /// \brief template function min_element
 ///
 /// range-based version of the min_element std algorithm
@@ -32,7 +54,7 @@ inline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
 min_element(ForwardRange& rng)
 {
     BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
-    return std::min_element(boost::begin(rng), boost::end(rng));
+    return detail::min_element(boost::begin(rng), boost::end(rng), detail::less());
 }
 
 /// \overload
@@ -41,7 +63,7 @@ inline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type
 min_element(const ForwardRange& rng)
 {
     BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
-    return std::min_element(boost::begin(rng), boost::end(rng));
+    return detail::min_element(boost::begin(rng), boost::end(rng), detail::less());
 }
 
 /// \overload
@@ -50,7 +72,7 @@ inline BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type
 min_element(ForwardRange& rng, BinaryPredicate pred)
 {
     BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
-    return std::min_element(boost::begin(rng), boost::end(rng), pred);
+    return detail::min_element(boost::begin(rng), boost::end(rng), pred);
 }
 
 /// \overload
@@ -59,7 +81,7 @@ inline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type
 min_element(const ForwardRange& rng, BinaryPredicate pred)
 {
     BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
-    return std::min_element(boost::begin(rng), boost::end(rng), pred);
+    return detail::min_element(boost::begin(rng), boost::end(rng), pred);
 }
 
 // range_return overloads
@@ -71,7 +93,7 @@ min_element(ForwardRange& rng)
 {
     BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
     return range_return<ForwardRange,re>::pack(
-        std::min_element(boost::begin(rng), boost::end(rng)),
+        detail::min_element(boost::begin(rng), boost::end(rng), detail::less()),
         rng);
 }
 
@@ -82,7 +104,7 @@ min_element(const ForwardRange& rng)
 {
     BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
     return range_return<const ForwardRange,re>::pack(
-        std::min_element(boost::begin(rng), boost::end(rng)),
+        detail::min_element(boost::begin(rng), boost::end(rng), detail::less()),
         rng);
 }
 
@@ -93,7 +115,7 @@ min_element(ForwardRange& rng, BinaryPredicate pred)
 {
     BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<ForwardRange> ));
     return range_return<ForwardRange,re>::pack(
-        std::min_element(boost::begin(rng), boost::end(rng), pred),
+        detail::min_element(boost::begin(rng), boost::end(rng), pred),
         rng);
 }
 
@@ -104,7 +126,7 @@ min_element(const ForwardRange& rng, BinaryPredicate pred)
 {
     BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
     return range_return<const ForwardRange,re>::pack(
-        std::min_element(boost::begin(rng), boost::end(rng), pred),
+        detail::min_element(boost::begin(rng), boost::end(rng), pred),
         rng);
 }