1 | *// (C) Copyright Herve Bronnimann 2004.* |

2 | *//* |

3 | *// Distributed under the Boost Software License, Version 1.0. (See accompanying* |

4 | *// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)* |

5 | |

6 | */** |

7 | * Revision history:* |

8 | * 1 July 2004* |

9 | * Split the code into two headers to lessen dependence on* |

10 | * Boost.tuple. (Herve)* |

11 | * 26 June 2004* |

12 | * Added the code for the boost minmax library. (Herve)* |

13 | **/* |

14 | |

15 | __#ifndef BOOST_ALGORITHM_MINMAX_HPP__ |

16 | __#define BOOST_ALGORITHM_MINMAX_HPP__ |

17 | |

18 | */* PROPOSED STANDARD EXTENSIONS:* |

19 | * ** |

20 | * * minmax(a, b)* |

21 | * * Effect: (b<a) ? std::make_pair(b,a) : std::make_pair(a,b);* |

22 | * ** |

23 | * * minmax(a, b, comp)* |

24 | * * Effect: comp(b,a) ? std::make_pair(b,a) : std::make_pair(a,b);* |

25 | * ** |

26 | * */* |

27 | |

28 | __#include <boost/tuple/tuple.hpp> // for using pairs with boost::cref__ |

29 | __#include <boost/ref.hpp>__ |

30 | |

31 | **namespace** boost { |

32 | |

33 | **template** <**typename** T> |

34 | tuple< T *const*&, T *const*& > |

35 | minmax(T *const*& a, T *const*& b) { |

36 | **return** (b<a) ? make_tuple(cref(b),cref(a)) : make_tuple(cref(a),cref(b)); |

37 | } |

38 | |

39 | **template** <**typename** T, **class** BinaryPredicate> |

40 | tuple< T *const*&, T *const*& > |

41 | minmax(T *const*& a, T *const*& b, BinaryPredicate comp) { |

42 | **return** comp(b,a) ? make_tuple(cref(b),cref(a)) : make_tuple(cref(a),cref(b)); |

43 | } |

44 | |

45 | } *// namespace boost* |

46 | |

47 | __#endif // BOOST_ALGORITHM_MINMAX_HPP__ |

48 | |