24 #ifndef ARM_COMPUTE_UTILS_CAST_SATURATE_CAST_H
25 #define ARM_COMPUTE_UTILS_CAST_SATURATE_CAST_H
43 typename std::enable_if<std::is_same<T, U>::value,
int >
::type = 0 >
52 typename std::enable_if<std::is_integral<T>::value &&
53 std::is_integral<U>::value &&
54 std::is_signed<U>() &&
55 std::is_signed<T>() &&
56 !std::is_same<T, U>::value &&
57 sizeof(T) >=
sizeof(
U),
61 return static_cast<T
>(v);
66 typename std::enable_if<std::is_integral<T>::value &&
67 std::is_integral<U>::value &&
68 std::is_signed<U>() &&
69 std::is_signed<T>() &&
70 !std::is_same<T, U>::value &&
71 sizeof(T) <
sizeof(
U),
81 typename std::enable_if<std::is_integral<T>::value &&
82 std::is_integral<U>::value &&
83 std::is_unsigned<U>() &&
84 std::is_signed<T>() &&
85 !std::is_same<T, U>::value &&
86 (
sizeof(T) >
sizeof(
U)),
90 return static_cast<T
>(v);
95 typename std::enable_if<std::is_integral<T>::value &&
96 std::is_integral<U>::value &&
97 std::is_unsigned<U>() &&
98 std::is_signed<T>() &&
99 !std::is_same<T, U>::value &&
100 sizeof(T) <
sizeof(
U),
104 return static_cast<T
>(std::min<U>(v, std::numeric_limits<T>::max()));
109 typename std::enable_if<std::is_integral<T>::value &&
110 std::is_integral<U>::value &&
111 std::is_unsigned<U>() &&
112 std::is_signed<T>() &&
113 !std::is_same<T, U>::value &&
114 sizeof(T) ==
sizeof(
U),
118 return static_cast<T
>(std::min<U>(v, std::numeric_limits<T>::max()));
124 typename std::enable_if<std::is_integral<T>::value &&
125 std::is_integral<U>::value &&
126 std::is_signed<U>() &&
127 std::is_unsigned<T>() &&
128 !std::is_same<T, U>::value &&
129 sizeof(T) >=
sizeof(
U),
133 return static_cast<T
>(std::max<U>(0, v));
139 typename std::enable_if<std::is_integral<T>::value &&
140 std::is_integral<U>::value &&
141 std::is_signed<U>() &&
142 std::is_unsigned<T>() &&
143 !std::is_same<T, U>::value &&
144 sizeof(T) <
sizeof(
U),
148 return static_cast<T
>(utility::clamp<U>(v, 0, std::numeric_limits<T>::max()));
154 typename std::enable_if<std::is_integral<T>::value &&
155 std::is_integral<U>::value &&
156 std::is_unsigned<T>() &&
157 std::is_unsigned<U>() &&
158 !std::is_same<T, U>::value &&
159 sizeof(T) >=
sizeof(
U),
163 return static_cast<T
>(v);
169 typename std::enable_if<std::is_integral<T>::value &&
170 std::is_integral<U>::value &&
171 std::is_unsigned<T>() &&
172 std::is_unsigned<U>() &&
173 !std::is_same<T, U>::value &&
174 sizeof(T) <
sizeof(
U),
184 typename std::enable_if<std::is_integral<T>::value &&
185 traits::is_floating_point<U>::value,
190 return saturate_cast<T>(vi);
196 typename std::enable_if<traits::is_floating_point<T>::value &&
197 std::is_integral<U>::value,
201 return static_cast<T
>(v);
207 typename std::enable_if<traits::is_floating_point<T>::value &&
208 traits::is_floating_point<U>::value,
212 return static_cast<T
>(v);