BLI: Math: Add math::divide_ceil and math::ceil_to_multiple

`math::divide_ceil` is just the vector implementation of `divide_ceil_u`.

`math::ceil_to_multiple` is similar but finaly multiply by the divisor.
It is handy to handle tile buffers resolutions.
This commit is contained in:
2022-06-07 15:28:34 +02:00
parent 7974d2bff6
commit ec493d79fa

View File

@@ -159,6 +159,26 @@ inline T safe_mod(const vec_base<T, Size> &a, const T &b)
return result;
}
template<typename T, int Size, BLI_ENABLE_IF((is_math_integral_type<T>))>
inline vec_base<T, Size> ceil_to_multiple(const vec_base<T, Size> &a, const vec_base<T, Size> &b)
{
vec_base<T, Size> result;
for (int i = 0; i < Size; i++) {
result[i] = ((a[i] + b[i] - 1) / b[i]) * b[i];
}
return result;
}
template<typename T, int Size, BLI_ENABLE_IF((is_math_integral_type<T>))>
inline vec_base<T, Size> divide_ceil(const vec_base<T, Size> &a, const vec_base<T, Size> &b)
{
vec_base<T, Size> result;
for (int i = 0; i < Size; i++) {
result[i] = (a[i] + b[i] - 1) / b[i];
}
return result;
}
template<typename T, int Size>
inline void min_max(const vec_base<T, Size> &vector,
vec_base<T, Size> &min,