24 #ifndef ARM_COMPUTE_UTILS_CAST_SATURATE_CAST_H
25 #define ARM_COMPUTE_UTILS_CAST_SATURATE_CAST_H
42 typename std::enable_if<std::is_same<T, U>::value,
int >
::type = 0 >
51 typename std::enable_if<std::is_integral<T>::value &&
52 std::is_integral<U>::value &&
53 std::is_signed<U>() &&
54 std::is_signed<T>() &&
55 !std::is_same<T, U>::value &&
56 sizeof(T) >=
sizeof(
U),
60 return static_cast<T
>(v);
65 typename std::enable_if<std::is_integral<T>::value &&
66 std::is_integral<U>::value &&
67 std::is_signed<U>() &&
68 std::is_signed<T>() &&
69 !std::is_same<T, U>::value &&
70 sizeof(T) <
sizeof(
U),
80 typename std::enable_if<std::is_integral<T>::value &&
81 std::is_integral<U>::value &&
82 std::is_unsigned<U>() &&
83 std::is_signed<T>() &&
84 !std::is_same<T, U>::value &&
85 (
sizeof(T) >
sizeof(
U)),
89 return static_cast<T
>(v);
94 typename std::enable_if<std::is_integral<T>::value &&
95 std::is_integral<U>::value &&
96 std::is_unsigned<U>() &&
97 std::is_signed<T>() &&
98 !std::is_same<T, U>::value &&
99 sizeof(T) <
sizeof(
U),
103 return static_cast<T
>(std::min<U>(v, std::numeric_limits<T>::max()));
108 typename std::enable_if<std::is_integral<T>::value &&
109 std::is_integral<U>::value &&
110 std::is_unsigned<U>() &&
111 std::is_signed<T>() &&
112 !std::is_same<T, U>::value &&
113 sizeof(T) ==
sizeof(
U),
117 return static_cast<T
>(std::min<U>(v, std::numeric_limits<T>::max()));
123 typename std::enable_if<std::is_integral<T>::value &&
124 std::is_integral<U>::value &&
125 std::is_signed<U>() &&
126 std::is_unsigned<T>() &&
127 !std::is_same<T, U>::value &&
128 sizeof(T) >=
sizeof(
U),
132 return static_cast<T
>(std::max<U>(0, v));
138 typename std::enable_if<std::is_integral<T>::value &&
139 std::is_integral<U>::value &&
140 std::is_signed<U>() &&
141 std::is_unsigned<T>() &&
142 !std::is_same<T, U>::value &&
143 sizeof(T) <
sizeof(
U),
147 return static_cast<T
>(utility::clamp<U>(v, 0, std::numeric_limits<T>::max()));
153 typename std::enable_if<std::is_integral<T>::value &&
154 std::is_integral<U>::value &&
155 std::is_unsigned<T>() &&
156 std::is_unsigned<U>() &&
157 !std::is_same<T, U>::value &&
158 sizeof(T) >=
sizeof(
U),
162 return static_cast<T
>(v);
168 typename std::enable_if<std::is_integral<T>::value &&
169 std::is_integral<U>::value &&
170 std::is_unsigned<T>() &&
171 std::is_unsigned<U>() &&
172 !std::is_same<T, U>::value &&
173 sizeof(T) <
sizeof(
U),
183 typename std::enable_if<std::is_integral<T>::value &&
184 traits::is_floating_point<U>::value,
189 return saturate_cast<T>(vi);
195 typename std::enable_if<traits::is_floating_point<T>::value &&
196 std::is_integral<U>::value,
200 return static_cast<T
>(v);
206 typename std::enable_if<traits::is_floating_point<T>::value &&
207 traits::is_floating_point<U>::value,
211 return static_cast<T
>(v);