8#ifndef ADOBE_ALGORITHM_MINMAX_HPP
9#define ADOBE_ALGORITHM_MINMAX_HPP
16#include <boost/range/begin.hpp>
17#include <boost/range/end.hpp>
68template <
class T,
class R>
69inline const T&(
min)(
const T& a,
const T& b, R r) {
70 return select_0_2(a, b, std::bind(r, std::placeholders::_1, std::placeholders::_2));
79template <
class T,
class R>
80inline T&(
min)(T& a, T& b, R r) {
81 return select_0_2(a, b, std::bind(r, std::placeholders::_1, std::placeholders::_2));
91inline const T&(
min)(
const T& a,
const T& b) {
102inline T&(
min)(T& a, T& b) {
112template <
class T,
class R>
113inline const T&(
max)(
const T& a,
const T& b, R r) {
114 return select_1_2(a, b, std::bind(r, std::placeholders::_1, std::placeholders::_2));
123template <
class T,
class R>
124inline T&(
max)(T& a, T& b, R r) {
125 return select_1_2(a, b, std::bind(r, std::placeholders::_1, std::placeholders::_2));
136inline const T&(
max)(
const T& a,
const T& b) {
147inline T&(
max)(T& a, T& b) {
156template <
class ForwardRange>
157inline typename boost::range_iterator<ForwardRange>::type
min_element(ForwardRange& range) {
158 return std::min_element(boost::begin(range), boost::end(range));
166template <
class ForwardRange>
167inline typename boost::range_const_iterator<ForwardRange>::type
169 return std::min_element(boost::begin(range), boost::end(range));
177template <
class ForwardIterator,
class R>
178inline ForwardIterator
min_element(ForwardIterator first, ForwardIterator last, R r) {
179 return std::min_element(first, last,
180 std::bind(r, std::placeholders::_1, std::placeholders::_2));
188template <
class ForwardRange,
class R>
189inline typename boost::range_iterator<ForwardRange>::type
min_element(ForwardRange& range, R r) {
198template <
class ForwardRange,
class R>
199inline typename boost::range_const_iterator<ForwardRange>::type
209template <
class ForwardRange>
210inline typename boost::range_iterator<ForwardRange>::type
max_element(ForwardRange& range) {
211 return std::max_element(boost::begin(range), boost::end(range));
219template <
class ForwardRange>
220inline typename boost::range_const_iterator<ForwardRange>::type
222 return std::max_element(boost::begin(range), boost::end(range));
230template <
class ForwardIterator,
class R>
231inline ForwardIterator
max_element(ForwardIterator first, ForwardIterator last, R r) {
232 return std::max_element(first, last,
233 std::bind(r, std::placeholders::_1, std::placeholders::_2));
241template <
class ForwardRange,
class R>
242inline typename boost::range_iterator<ForwardRange>::type
max_element(ForwardRange& range, R r) {
251template <
class ForwardRange,
class R>
252inline typename boost::range_const_iterator<ForwardRange>::type
boost::range_iterator< ForwardRange >::type min_element(ForwardRange &range)
minmax implementation
const T & max(const T &a, const T &b, R r)
minmax implementation
const T & min(const T &a, const T &b, R r)
minmax implementation
boost::range_iterator< ForwardRange >::type max_element(ForwardRange &range)
minmax implementation
const T & select_0_2(const T &a, const T &b, R r)
select_0 implementation
const T & select_1_2(const T &a, const T &b, R r)
select_0 implementation