1 /* ///////////////////////////////////////////////////////////////////////
7 * Brief: The maximum and minimum value
10 * Copyright (c) 2008-2020, Waruqi All rights reserved.
11 * //////////////////////////////////////////////////////////////////// */
12 #ifndef EXTL_MPL_MATH_MAX_MIN_H
13 #define EXTL_MPL_MATH_MAX_MIN_H
16 * \brief The maximum and minimum value
19 /* ///////////////////////////////////////////////////////////////////////
25 /* ///////////////////////////////////////////////////////////////////////
26 * ::extl::mpl namespace
28 EXTL_MPL_BEGIN_WHOLE_NAMESPACE
31 template < e_umax_int_t N1
, e_umax_int_t N2
>
34 EXTL_STATIC_MEMBER_CONST(e_umax_int_t
, value
= (N1
> N2
)? N1
: N2
);
38 template < e_umax_int_t N1
, e_umax_int_t N2
>
39 struct max_2
: max
<N1
, N2
> {};
42 template < e_umax_int_t N1
, e_umax_int_t N2
, e_umax_int_t N3
>
45 EXTL_STATIC_MEMBER_CONST(e_umax_int_t
, value
= ((max
<N1
, N2
>::value
) > N3
)? (max
<N1
, N2
>::value
) : N3
);
49 template < e_umax_int_t N1
, e_umax_int_t N2
, e_umax_int_t N3
, e_umax_int_t N4
>
52 EXTL_STATIC_MEMBER_CONST(e_umax_int_t
, value
= ((max
<N1
, N2
>::value
) > (max
<N3
, N4
>::value
))?
53 (max
<N1
, N2
>::value
) : (max
<N3
, N4
>::value
));
57 template < e_umax_int_t N1
, e_umax_int_t N2
>
60 EXTL_STATIC_MEMBER_CONST(e_umax_int_t
, value
= (N1
< N2
)? N1
: N2
);
64 template < e_umax_int_t N1
, e_umax_int_t N2
>
65 struct min_2
: min
<N1
, N2
> {};
68 template < e_umax_int_t N1
, e_umax_int_t N2
, e_umax_int_t N3
>
71 EXTL_STATIC_MEMBER_CONST(e_umax_int_t
, value
= ((min
<N1
, N2
>::value
) < N3
)? (min
<N1
, N2
>::value
) : N3
);
75 template < e_umax_int_t N1
, e_umax_int_t N2
, e_umax_int_t N3
, e_umax_int_t N4
>
78 EXTL_STATIC_MEMBER_CONST(e_umax_int_t
, value
= ((min
<N1
, N2
>::value
) < (min
<N3
, N4
>::value
))?
79 (min
<N1
, N2
>::value
) : (min
<N3
, N4
>::value
));
81 /* ///////////////////////////////////////////////////////////////////////
84 #ifdef EXTL_MPL_MATH_MAX_MIN_TEST_ENABLE
85 # include "unit_test/max_min_test.h"
87 /* ///////////////////////////////////////////////////////////////////////
88 * ::extl::mpl namespace
90 EXTL_MPL_END_WHOLE_NAMESPACE
92 /* //////////////////////////////////////////////////////////////////// */
93 #endif /* EXTL_MPL_MATH_MAX_MIN_H */
94 /* //////////////////////////////////////////////////////////////////// */