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:
parent
940fd87e77
commit
11ecde6a5a
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue