Branch data Line data Source code
1 : : #pragma once
2 : :
3 : : #include <cassert>
4 : : #include <cstddef>
5 : : #include <limits>
6 : :
7 : : namespace sl3
8 : : {
9 : :
10 : : inline size_t
11 : 393 : as_size_t (int val)
12 : : {
13 [ - + ]: 393 : assert (val >= 0);
14 : 393 : return static_cast<size_t> (val);
15 : : }
16 : :
17 : : inline size_t
18 : 12 : as_size_t (ptrdiff_t val)
19 : : {
20 [ - + ]: 12 : assert (val >= 0);
21 : 12 : return static_cast<size_t> (val);
22 : : }
23 : :
24 : : inline int
25 : 8 : as_int (size_t val)
26 : : {
27 [ - + ]: 8 : assert (val < std::numeric_limits<int>::max ());
28 : 8 : return static_cast<int> (val);
29 : : }
30 : :
31 : : // gcc -Werror=conversion helpers
32 : : // I keep that as a comment, since it's so funny, but not use it
33 : : // template <typename T1, typename T2> struct common_typeype
34 : : // {
35 : : // typedef typename std::conditional < std::numeric_limits<T1>::is_iec559
36 : : // &&std::numeric_limits<T2>::is_iec559,
37 : : // typename std::conditional<
38 : : // std::numeric_limits<
39 : : // T1>::digits<std::numeric_limits<T2>::digits, T2, T1>::type,
40 : : // typename std::conditional<std::numeric_limits<T1>::is_iec559,
41 : : // T1,
42 : : // T2>::type>::type type;
43 : : // };
44 : :
45 : : template <typename T1, typename T2>
46 : : bool
47 : 10 : is_less (const T1& a, const T2& b)
48 : : {
49 : : using common_type = std::common_type_t<T1, T2>;
50 : 20 : return std::less<common_type>{}(static_cast<common_type> (a),
51 : 10 : static_cast<common_type> (b));
52 : : }
53 : :
54 : : template <typename T1, typename T2>
55 : : bool
56 : 3 : is_greater (const T1& a, const T2& b)
57 : : {
58 : : using common_type = std::common_type_t<T1, T2>;
59 : 6 : return std::greater<common_type>{}(static_cast<common_type> (a),
60 : 3 : static_cast<common_type> (b));
61 : : }
62 : :
63 : : template <typename T1, typename T2>
64 : : bool
65 : 3 : is_less_equal (const T1& a, const T2& b)
66 : : {
67 : : using common_type = std::common_type_t<T1, T2>;
68 : 6 : return std::less_equal<common_type>{}(static_cast<common_type> (a),
69 : 3 : static_cast<common_type> (b));
70 : : }
71 : :
72 : : template <typename T1, typename T2>
73 : : bool
74 : 4 : is_equal (const T1& a, const T2& b)
75 : : {
76 : : using common_type = std::common_type_t<T1, T2>;
77 : 8 : return std::equal_to<common_type>{}(static_cast<common_type> (a),
78 : 4 : static_cast<common_type> (b));
79 : : }
80 : :
81 : : }
|