1 #pragma once
2
3 #include <type_traits>
4 #include <algorithm>
5 #include <cmath>
6
7 namespace mbgl {
8 namespace util {
9
10 template <typename T>
max(T a,T b)11 typename std::enable_if_t<std::is_integral<T>::value, T> max(T a, T b) {
12 return std::max(a, b);
13 }
14
15 template <typename T>
max(T a,T b)16 typename std::enable_if_t<std::is_floating_point<T>::value, T> max(T a, T b) {
17 return ::fmax(a, b);
18 }
19
20 template <typename T, typename... Ts>
max(T a,T b,Ts...args)21 typename std::enable_if_t<std::is_arithmetic<T>::value, T> max(T a, T b, Ts... args) {
22 return max(a, max(b, args...));
23 }
24
25 template <typename T>
min(T a,T b)26 typename std::enable_if_t<std::is_integral<T>::value, T> min(T a, T b) {
27 return std::min(a, b);
28 }
29
30 template <typename T>
min(T a,T b)31 typename std::enable_if_t<std::is_floating_point<T>::value, T> min(T a, T b) {
32 return ::fmin(a, b);
33 }
34
35 template <typename T, typename... Ts>
min(T a,T b,Ts...args)36 typename std::enable_if_t<std::is_arithmetic<T>::value, T> min(T a, T b, Ts... args) {
37 return min(a, min(b, args...));
38 }
39
40 } // namespace util
41 } // namespace mbgl
42