stlab.adobe.com Adobe Systems Incorporated
minmax.hpp
Go to the documentation of this file.
1 /*
2  Copyright 2005-2007 Adobe Systems Incorporated
3  Distributed under the MIT License (see accompanying file LICENSE_1_0_0.txt
4  or a copy at http://stlab.adobe.com/licenses.html)
5 */
6 
7 /*************************************************************************************************/
8 
9 #ifndef ADOBE_ALGORITHM_MINMAX_HPP
10 #define ADOBE_ALGORITHM_MINMAX_HPP
11 
12 #include <adobe/config.hpp>
13 
14 #include <boost/range/begin.hpp>
15 #include <boost/range/end.hpp>
16 #include <boost/bind.hpp>
17 
18 #include <algorithm>
19 
20 /*************************************************************************************************/
21 
22 namespace adobe {
23 
24 /*************************************************************************************************/
57 /*************************************************************************************************/
58 
65 template <class T>
66 inline const T& (min)(const T& a, const T& b)
67 { return a < b ? a : b; }
68 
75 template <class T>
76 inline T& (min)(T& a, T& b)
77 { return a < b ? a : b; }
78 
85 template <class T>
86 inline const T& (max)(const T& a, const T& b)
87 { return b < a ? a : b; }
88 
95 template <class T>
96 inline T& (max)(T& a, T& b)
97 { return b < a ? a : b; }
98 
105 template <class T, class Compare>
106 inline const T& (min)(const T& a, const T& b, Compare comp)
107 {
108  return (std::min)(a, b, boost::bind(comp, _1, _2));
109 }
110 
117 template <class T, class Compare>
118 inline T& (min)(T& a, T& b, Compare comp)
119 {
120  return (std::min)(a, b, boost::bind(comp, _1, _2));
121 }
122 
129 template <class T, class Compare>
130 inline const T& (max)(const T& a, const T& b, Compare comp)
131 {
132  return boost::bind(comp, _1, _2)(b, a) ? a : b;
133 }
134 
141 template <class T, class Compare>
142 inline T& (max)(T& a, T& b, Compare comp)
143 {
144  return boost::bind(comp, _1, _2)(b, a) ? a : b;
145 }
146 
152 template <class ForwardRange>
153 inline typename boost::range_iterator<ForwardRange>::type min_element(ForwardRange& range)
154 {
155  return std::min_element(boost::begin(range), boost::end(range));
156 }
157 
163 template <class ForwardRange>
164 inline typename boost::range_const_iterator<ForwardRange>::type
165 min_element(const ForwardRange& range)
166 {
167  return std::min_element(boost::begin(range), boost::end(range));
168 }
169 
175 template <class ForwardIterator, class Compare>
176 inline ForwardIterator min_element(ForwardIterator first, ForwardIterator last, Compare comp)
177 {
178  return std::min_element(first, last, boost::bind(comp, _1, _2));
179 }
180 
186 template <class ForwardRange, class Compare>
187 inline typename boost::range_iterator<ForwardRange>::type
188 min_element(ForwardRange& range, Compare comp)
189 {
190  return adobe::min_element(boost::begin(range), boost::end(range), comp);
191 }
192 
198 template <class ForwardRange, class Compare>
199 inline typename boost::range_const_iterator<ForwardRange>::type
200 min_element(const ForwardRange& range, Compare comp)
201 {
202  return adobe::min_element(boost::begin(range), boost::end(range), comp);
203 }
204 
210 template <class ForwardRange>
211 inline typename boost::range_iterator<ForwardRange>::type max_element(ForwardRange& range)
212 {
213  return std::max_element(boost::begin(range), boost::end(range));
214 }
215 
221 template <class ForwardRange>
222 inline typename boost::range_const_iterator<ForwardRange>::type
223 max_element(const ForwardRange& range)
224 {
225  return std::max_element(boost::begin(range), boost::end(range));
226 }
227 
233 template <class ForwardIterator, class Compare>
234 inline ForwardIterator max_element(ForwardIterator first, ForwardIterator last, Compare comp)
235 {
236  return std::max_element(first, last, boost::bind(comp, _1, _2));
237 }
238 
244 template <class ForwardRange, class Compare>
245 inline typename boost::range_iterator<ForwardRange>::type
246 max_element(ForwardRange& range, Compare comp)
247 {
248  return adobe::max_element(boost::begin(range), boost::end(range), comp);
249 }
250 
256 template <class ForwardRange, class Compare>
257 inline typename boost::range_const_iterator<ForwardRange>::type
258 max_element(const ForwardRange& range, Compare comp)
259 {
260  return adobe::max_element(boost::begin(range), boost::end(range), comp);
261 }
262 
263 /*************************************************************************************************/
264 
265 } // namespace adobe
266 
267 /*************************************************************************************************/
268 
269 #endif
270 
271 /*************************************************************************************************/

Copyright © 2006-2007 Adobe Systems Incorporated.

Use of this website signifies your agreement to the Terms of Use and Online Privacy Policy.

Search powered by Google