Cleanup: BLI: Remove BLI_ENABLE_IF((is_math_float_type)) from vector API

This was limiting the use of the templates with other non internal types
like Ceres types, xithout defining thing like that:
`template<> inline constexpr bool is_math_float_type<mpq_class> = true;`
This commit is contained in:
Clément Foucault 2023-01-03 23:41:57 +01:00
parent 940fd87e77
commit 11ecde6a5a
1 changed files with 28 additions and 38 deletions

View File

@ -102,7 +102,7 @@ inline vec_base<T, Size> clamp(const vec_base<T, Size> &a, const T &min, const T
return result;
}
template<typename T, int Size, BLI_ENABLE_IF((is_math_float_type<T>))>
template<typename T, int Size>
inline vec_base<T, Size> mod(const vec_base<T, Size> &a, const vec_base<T, Size> &b)
{
vec_base<T, Size> result;
@ -113,8 +113,7 @@ inline vec_base<T, Size> mod(const vec_base<T, Size> &a, const vec_base<T, Size>
return result;
}
template<typename T, int Size, BLI_ENABLE_IF((is_math_float_type<T>))>
inline vec_base<T, Size> mod(const vec_base<T, Size> &a, const T &b)
template<typename T, int Size> inline vec_base<T, Size> mod(const vec_base<T, Size> &a, const T &b)
{
BLI_assert(b != 0);
vec_base<T, Size> result;
@ -124,7 +123,7 @@ inline vec_base<T, Size> mod(const vec_base<T, Size> &a, const T &b)
return result;
}
template<typename T, int Size, BLI_ENABLE_IF((is_math_float_type<T>))>
template<typename T, int Size>
inline vec_base<T, Size> safe_mod(const vec_base<T, Size> &a, const vec_base<T, Size> &b)
{
vec_base<T, Size> result;
@ -134,7 +133,7 @@ inline vec_base<T, Size> safe_mod(const vec_base<T, Size> &a, const vec_base<T,
return result;
}
template<typename T, int Size, BLI_ENABLE_IF((is_math_float_type<T>))>
template<typename T, int Size>
inline vec_base<T, Size> safe_mod(const vec_base<T, Size> &a, const T &b)
{
if (b == 0) {
@ -152,7 +151,7 @@ inline vec_base<T, Size> safe_mod(const vec_base<T, Size> &a, const T &b)
* In other words, it is equivalent to `divide_ceil(a, b) * b`.
* It is undefined if \a a is negative or \b b is not strictly positive.
*/
template<typename T, int Size, BLI_ENABLE_IF((is_math_integral_type<T>))>
template<typename T, int Size>
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;
@ -168,7 +167,7 @@ inline vec_base<T, Size> ceil_to_multiple(const vec_base<T, Size> &a, const vec_
* Integer division that returns the ceiling, instead of flooring like normal C division.
* It is undefined if \a a is negative or \b b is not strictly positive.
*/
template<typename T, int Size, BLI_ENABLE_IF((is_math_integral_type<T>))>
template<typename T, int Size>
inline vec_base<T, Size> divide_ceil(const vec_base<T, Size> &a, const vec_base<T, Size> &b)
{
vec_base<T, Size> result;
@ -189,7 +188,7 @@ inline void min_max(const vec_base<T, Size> &vector,
max = math::max(vector, max);
}
template<typename T, int Size, BLI_ENABLE_IF((is_math_float_type<T>))>
template<typename T, int Size>
inline vec_base<T, Size> safe_divide(const vec_base<T, Size> &a, const vec_base<T, Size> &b)
{
vec_base<T, Size> result;
@ -199,14 +198,13 @@ inline vec_base<T, Size> safe_divide(const vec_base<T, Size> &a, const vec_base<
return result;
}
template<typename T, int Size, BLI_ENABLE_IF((is_math_float_type<T>))>
template<typename T, int Size>
inline vec_base<T, Size> safe_divide(const vec_base<T, Size> &a, const T &b)
{
return (b != 0) ? a / b : vec_base<T, Size>(0.0f);
}
template<typename T, int Size, BLI_ENABLE_IF((is_math_float_type<T>))>
inline vec_base<T, Size> floor(const vec_base<T, Size> &a)
template<typename T, int Size> inline vec_base<T, Size> floor(const vec_base<T, Size> &a)
{
vec_base<T, Size> result;
for (int i = 0; i < Size; i++) {
@ -215,8 +213,7 @@ inline vec_base<T, Size> floor(const vec_base<T, Size> &a)
return result;
}
template<typename T, int Size, BLI_ENABLE_IF((is_math_float_type<T>))>
inline vec_base<T, Size> ceil(const vec_base<T, Size> &a)
template<typename T, int Size> inline vec_base<T, Size> ceil(const vec_base<T, Size> &a)
{
vec_base<T, Size> result;
for (int i = 0; i < Size; i++) {
@ -225,8 +222,7 @@ inline vec_base<T, Size> ceil(const vec_base<T, Size> &a)
return result;
}
template<typename T, int Size, BLI_ENABLE_IF((is_math_float_type<T>))>
inline vec_base<T, Size> fract(const vec_base<T, Size> &a)
template<typename T, int Size> inline vec_base<T, Size> fract(const vec_base<T, Size> &a)
{
vec_base<T, Size> result;
for (int i = 0; i < Size; i++) {
@ -235,8 +231,7 @@ inline vec_base<T, Size> fract(const vec_base<T, Size> &a)
return result;
}
template<typename T, int Size, BLI_ENABLE_IF((is_math_float_type<T>))>
inline T dot(const vec_base<T, Size> &a, const vec_base<T, Size> &b)
template<typename T, int Size> inline T dot(const vec_base<T, Size> &a, const vec_base<T, Size> &b)
{
T result = a[0] * b[0];
for (int i = 1; i < Size; i++) {
@ -254,14 +249,12 @@ template<typename T, int Size> inline T length_manhattan(const vec_base<T, Size>
return result;
}
template<typename T, int Size, BLI_ENABLE_IF((is_math_float_type<T>))>
inline T length_squared(const vec_base<T, Size> &a)
template<typename T, int Size> inline T length_squared(const vec_base<T, Size> &a)
{
return dot(a, a);
}
template<typename T, int Size, BLI_ENABLE_IF((is_math_float_type<T>))>
inline T length(const vec_base<T, Size> &a)
template<typename T, int Size> inline T length(const vec_base<T, Size> &a)
{
return std::sqrt(length_squared(a));
}
@ -276,25 +269,25 @@ template<typename T, int Size> inline bool is_unit_scale(const vec_base<T, Size>
!(std::abs(test_unit) >= AssertUnitEpsilon<T>::value));
}
template<typename T, int Size, BLI_ENABLE_IF((is_math_float_type<T>))>
template<typename T, int Size>
inline T distance_manhattan(const vec_base<T, Size> &a, const vec_base<T, Size> &b)
{
return length_manhattan(a - b);
}
template<typename T, int Size, BLI_ENABLE_IF((is_math_float_type<T>))>
template<typename T, int Size>
inline T distance_squared(const vec_base<T, Size> &a, const vec_base<T, Size> &b)
{
return length_squared(a - b);
}
template<typename T, int Size, BLI_ENABLE_IF((is_math_float_type<T>))>
template<typename T, int Size>
inline T distance(const vec_base<T, Size> &a, const vec_base<T, Size> &b)
{
return length(a - b);
}
template<typename T, int Size, BLI_ENABLE_IF((is_math_float_type<T>))>
template<typename T, int Size>
inline vec_base<T, Size> reflect(const vec_base<T, Size> &incident,
const vec_base<T, Size> &normal)
{
@ -302,7 +295,7 @@ inline vec_base<T, Size> reflect(const vec_base<T, Size> &incident,
return incident - 2.0 * dot(normal, incident) * normal;
}
template<typename T, int Size, BLI_ENABLE_IF((is_math_float_type<T>))>
template<typename T, int Size>
inline vec_base<T, Size> refract(const vec_base<T, Size> &incident,
const vec_base<T, Size> &normal,
const T &eta)
@ -315,7 +308,7 @@ inline vec_base<T, Size> refract(const vec_base<T, Size> &incident,
return eta * incident - (eta * dot_ni + sqrt(k)) * normal;
}
template<typename T, int Size, BLI_ENABLE_IF((is_math_float_type<T>))>
template<typename T, int Size>
inline vec_base<T, Size> project(const vec_base<T, Size> &p, const vec_base<T, Size> &v_proj)
{
if (UNLIKELY(is_zero(v_proj))) {
@ -324,7 +317,7 @@ inline vec_base<T, Size> project(const vec_base<T, Size> &p, const vec_base<T, S
return v_proj * (dot(p, v_proj) / dot(v_proj, v_proj));
}
template<typename T, int Size, BLI_ENABLE_IF((is_math_float_type<T>))>
template<typename T, int Size>
inline vec_base<T, Size> normalize_and_get_length(const vec_base<T, Size> &v, T &out_length)
{
out_length = length_squared(v);
@ -339,15 +332,13 @@ inline vec_base<T, Size> normalize_and_get_length(const vec_base<T, Size> &v, T
return vec_base<T, Size>(0.0);
}
template<typename T, int Size, BLI_ENABLE_IF((is_math_float_type<T>))>
inline vec_base<T, Size> normalize(const vec_base<T, Size> &v)
template<typename T, int Size> inline vec_base<T, Size> normalize(const vec_base<T, Size> &v)
{
T len;
return normalize_and_get_length(v, len);
}
template<typename T, BLI_ENABLE_IF((is_math_float_type<T>))>
inline vec_base<T, 3> cross(const vec_base<T, 3> &a, const vec_base<T, 3> &b)
template<typename T> inline vec_base<T, 3> cross(const vec_base<T, 3> &a, const vec_base<T, 3> &b)
{
return {a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x};
}
@ -360,8 +351,7 @@ inline vec_base<float, 3> cross_high_precision(const vec_base<float, 3> &a,
float(double(a.x) * double(b.y) - double(a.y) * double(b.x))};
}
template<typename T, BLI_ENABLE_IF((is_math_float_type<T>))>
inline vec_base<T, 3> cross_poly(Span<vec_base<T, 3>> poly)
template<typename T> inline vec_base<T, 3> cross_poly(Span<vec_base<T, 3>> poly)
{
/* Newell's Method. */
int nv = int(poly.size());
@ -384,7 +374,7 @@ inline vec_base<T, 3> cross_poly(Span<vec_base<T, 3>> poly)
return n;
}
template<typename T, typename FactorT, int Size, BLI_ENABLE_IF((is_math_float_type<FactorT>))>
template<typename T, typename FactorT, int Size>
inline vec_base<T, Size> interpolate(const vec_base<T, Size> &a,
const vec_base<T, Size> &b,
const FactorT &t)
@ -392,7 +382,7 @@ inline vec_base<T, Size> interpolate(const vec_base<T, Size> &a,
return a * (1 - t) + b * t;
}
template<typename T, int Size, BLI_ENABLE_IF((is_math_float_type<T>))>
template<typename T, int Size>
inline vec_base<T, Size> midpoint(const vec_base<T, Size> &a, const vec_base<T, Size> &b)
{
return (a + b) * 0.5;
@ -401,7 +391,7 @@ inline vec_base<T, Size> midpoint(const vec_base<T, Size> &a, const vec_base<T,
/**
* Return `vector` if `incident` and `reference` are pointing in the same direction.
*/
template<typename T, int Size, BLI_ENABLE_IF((is_math_float_type<T>))>
template<typename T, int Size>
inline vec_base<T, Size> faceforward(const vec_base<T, Size> &vector,
const vec_base<T, Size> &incident,
const vec_base<T, Size> &reference)
@ -466,7 +456,7 @@ template<typename T> struct isect_result {
typename T::base_type lambda;
};
template<typename T, int Size, BLI_ENABLE_IF((is_math_float_type<T>))>
template<typename T, int Size>
isect_result<vec_base<T, Size>> isect_seg_seg(const vec_base<T, Size> &v1,
const vec_base<T, Size> &v2,
const vec_base<T, Size> &v3,