L4Re Operating System Framework
Interface and Usage Documentation
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
minmax
1// vi:set ft=cpp: -*- Mode: C++ -*-
2/*
3 * (c) 2008-2009 Alexander Warg <warg@os.inf.tu-dresden.de>
4 * economic rights: Technische Universität Dresden (Germany)
5 *
6 * License: see LICENSE.spdx (in this directory or the directories above)
7 */
8#pragma once
9
10#include "type_traits"
11
16namespace cxx
17{
18 // trivial, used to terminate the variadic recursion
19 template<typename A>
20 constexpr A const &
21 min(A const &a)
22 { return a; }
23
34 template<typename A, typename ...ARGS>
35 constexpr A const &
36 min(A const &a1, A const &a2, ARGS const &...a)
37 {
38 return min((a1 <= a2) ? a1 : a2, a...);
39 }
40
51 template<typename A, typename ...ARGS>
52 constexpr A const &
53 min(cxx::identity_t<A> const &a1,
54 cxx::identity_t<A> const &a2,
55 ARGS const &...a)
56 {
57 return min<A>((a1 <= a2) ? a1 : a2, a...);
58 }
59
60 // trivial, used to terminate the variadic recursion
61 template<typename A>
62 constexpr A const &
63 max(A const &a)
64 { return a; }
65
76 template<typename A, typename ...ARGS>
77 constexpr A const &
78 max(A const &a1, A const &a2, ARGS const &...a)
79 { return max((a1 >= a2) ? a1 : a2, a...); }
80
91 template<typename A, typename ...ARGS>
92 constexpr A const &
93 max(cxx::identity_t<A> const &a1,
94 cxx::identity_t<A> const &a2,
95 ARGS const &...a)
96 {
97 return max<A>((a1 >= a2) ? a1 : a2, a...);
98 }
99
107 template< typename T1 >
108 inline
109 T1 clamp(T1 v, T1 lo, T1 hi)
110 { return min(hi, max(lo, v)); }
111};
T1 clamp(T1 v, T1 lo, T1 hi)
Limit v to the range given by lo and hi.
Definition minmax:109
Our C++ library.
Definition arith:11