Adobe Source Libraries 2.0.0
A collection of C++ libraries.
Loading...
Searching...
No Matches
minmax.hpp
Go to the documentation of this file.
1/*
2 Copyright 2013 Adobe
3 Distributed under the Boost Software License, Version 1.0.
4 (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5*/
6/**************************************************************************************************/
7
8#ifndef ADOBE_ALGORITHM_MINMAX_HPP
9#define ADOBE_ALGORITHM_MINMAX_HPP
10
11#include <adobe/config.hpp>
12
13#include <algorithm>
14#include <functional>
15
16#include <boost/range/begin.hpp>
17#include <boost/range/end.hpp>
18
20
22
23/**************************************************************************************************/
24
25namespace adobe {
26
27/**************************************************************************************************/
60/**************************************************************************************************/
61
67
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));
71}
72
78
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));
82}
83
89
90template <class T>
91inline const T&(min)(const T& a, const T& b) {
92 return select_0_2(a, b, less());
93}
94
100
101template <class T>
102inline T&(min)(T& a, T& b) {
103 return select_0_2(a, b, less());
104}
105
111
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));
115}
116
122
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));
126}
127
133
134
135template <class T>
136inline const T&(max)(const T& a, const T& b) {
137 return select_1_2(a, b, less());
138}
139
145
146template <class T>
147inline T&(max)(T& a, T& b) {
148 return select_1_2(a, b, less());
149}
150
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));
159}
160
166template <class ForwardRange>
167inline typename boost::range_const_iterator<ForwardRange>::type
168min_element(const ForwardRange& range) {
169 return std::min_element(boost::begin(range), boost::end(range));
170}
171
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));
181}
182
188template <class ForwardRange, class R>
189inline typename boost::range_iterator<ForwardRange>::type min_element(ForwardRange& range, R r) {
190 return adobe::min_element(boost::begin(range), boost::end(range), r);
191}
192
198template <class ForwardRange, class R>
199inline typename boost::range_const_iterator<ForwardRange>::type
200min_element(const ForwardRange& range, R r) {
201 return adobe::min_element(boost::begin(range), boost::end(range), r);
202}
203
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));
212}
213
219template <class ForwardRange>
220inline typename boost::range_const_iterator<ForwardRange>::type
221max_element(const ForwardRange& range) {
222 return std::max_element(boost::begin(range), boost::end(range));
223}
224
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));
234}
235
241template <class ForwardRange, class R>
242inline typename boost::range_iterator<ForwardRange>::type max_element(ForwardRange& range, R r) {
243 return adobe::max_element(boost::begin(range), boost::end(range), r);
244}
245
251template <class ForwardRange, class R>
252inline typename boost::range_const_iterator<ForwardRange>::type
253max_element(const ForwardRange& range, R r) {
254 return adobe::max_element(boost::begin(range), boost::end(range), r);
255}
256
257/**************************************************************************************************/
258
259} // namespace adobe
260
261/**************************************************************************************************/
262
263#endif
264
265/**************************************************************************************************/
boost::range_iterator< ForwardRange >::type min_element(ForwardRange &range)
minmax implementation
Definition minmax.hpp:157
const T & max(const T &a, const T &b, R r)
minmax implementation
Definition minmax.hpp:113
const T & min(const T &a, const T &b, R r)
minmax implementation
Definition minmax.hpp:69
boost::range_iterator< ForwardRange >::type max_element(ForwardRange &range)
minmax implementation
Definition minmax.hpp:210
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