diff options
Diffstat (limited to 'source/blender/blenlib/BLI_math_vec_types.hh')
-rw-r--r-- | source/blender/blenlib/BLI_math_vec_types.hh | 150 |
1 files changed, 75 insertions, 75 deletions
diff --git a/source/blender/blenlib/BLI_math_vec_types.hh b/source/blender/blenlib/BLI_math_vec_types.hh index 9ba29d41684..ae8cb0056bb 100644 --- a/source/blender/blenlib/BLI_math_vec_types.hh +++ b/source/blender/blenlib/BLI_math_vec_types.hh @@ -93,22 +93,22 @@ template<typename T, int Size> struct vec_base : public vec_struct_base<T, Size> } /* Workaround issue with template. */ -#define BLI_VEC_ENABLE_IF(_size, _test) int S = _size, BLI_ENABLE_IF((S _test)) +#define BLI_ENABLE_IF_VEC(_size, _test) int S = _size, BLI_ENABLE_IF((S _test)) - template<BLI_VEC_ENABLE_IF(Size, == 2)> vec_base(T _x, T _y) + template<BLI_ENABLE_IF_VEC(Size, == 2)> vec_base(T _x, T _y) { (*this)[0] = _x; (*this)[1] = _y; } - template<BLI_VEC_ENABLE_IF(Size, == 3)> vec_base(T _x, T _y, T _z) + template<BLI_ENABLE_IF_VEC(Size, == 3)> vec_base(T _x, T _y, T _z) { (*this)[0] = _x; (*this)[1] = _y; (*this)[2] = _z; } - template<BLI_VEC_ENABLE_IF(Size, == 4)> vec_base(T _x, T _y, T _z, T _w) + template<BLI_ENABLE_IF_VEC(Size, == 4)> vec_base(T _x, T _y, T _z, T _w) { (*this)[0] = _x; (*this)[1] = _y; @@ -118,52 +118,52 @@ template<typename T, int Size> struct vec_base : public vec_struct_base<T, Size> /** Mixed scalar-vector constructors. */ - template<typename U, BLI_VEC_ENABLE_IF(Size, == 3)> + template<typename U, BLI_ENABLE_IF_VEC(Size, == 3)> constexpr vec_base(const vec_base<U, 2> &xy, T z) : vec_base(static_cast<T>(xy.x), static_cast<T>(xy.y), z) { } - template<typename U, BLI_VEC_ENABLE_IF(Size, == 3)> + template<typename U, BLI_ENABLE_IF_VEC(Size, == 3)> constexpr vec_base(T x, const vec_base<U, 2> &yz) : vec_base(x, static_cast<T>(yz.x), static_cast<T>(yz.y)) { } - template<typename U, BLI_VEC_ENABLE_IF(Size, == 4)> + template<typename U, BLI_ENABLE_IF_VEC(Size, == 4)> vec_base(vec_base<U, 3> xyz, T w) : vec_base( static_cast<T>(xyz.x), static_cast<T>(xyz.y), static_cast<T>(xyz.z), static_cast<T>(w)) { } - template<typename U, BLI_VEC_ENABLE_IF(Size, == 4)> + template<typename U, BLI_ENABLE_IF_VEC(Size, == 4)> vec_base(T x, vec_base<U, 3> yzw) : vec_base( static_cast<T>(x), static_cast<T>(yzw.x), static_cast<T>(yzw.y), static_cast<T>(yzw.z)) { } - template<typename U, BLI_VEC_ENABLE_IF(Size, == 4)> + template<typename U, BLI_ENABLE_IF_VEC(Size, == 4)> vec_base(vec_base<U, 2> xy, vec_base<U, 2> zw) : vec_base( static_cast<T>(xy.x), static_cast<T>(xy.y), static_cast<T>(zw.x), static_cast<T>(zw.y)) { } - template<typename U, BLI_VEC_ENABLE_IF(Size, == 4)> + template<typename U, BLI_ENABLE_IF_VEC(Size, == 4)> vec_base(vec_base<U, 2> xy, T z, T w) : vec_base(static_cast<T>(xy.x), static_cast<T>(xy.y), static_cast<T>(z), static_cast<T>(w)) { } - template<typename U, BLI_VEC_ENABLE_IF(Size, == 4)> + template<typename U, BLI_ENABLE_IF_VEC(Size, == 4)> vec_base(T x, vec_base<U, 2> yz, T w) : vec_base(static_cast<T>(x), static_cast<T>(yz.x), static_cast<T>(yz.y), static_cast<T>(w)) { } - template<typename U, BLI_VEC_ENABLE_IF(Size, == 4)> + template<typename U, BLI_ENABLE_IF_VEC(Size, == 4)> vec_base(T x, T y, vec_base<U, 2> zw) : vec_base(static_cast<T>(x), static_cast<T>(y), static_cast<T>(zw.x), static_cast<T>(zw.y)) { @@ -171,17 +171,17 @@ template<typename T, int Size> struct vec_base : public vec_struct_base<T, Size> /** Masking. */ - template<BLI_VEC_ENABLE_IF(Size, >= 3)> explicit operator vec_base<T, 2>() const + template<BLI_ENABLE_IF_VEC(Size, >= 3)> explicit operator vec_base<T, 2>() const { return vec_base<T, 2>(UNPACK2(*this)); } - template<BLI_VEC_ENABLE_IF(Size, >= 4)> explicit operator vec_base<T, 3>() const + template<BLI_ENABLE_IF_VEC(Size, >= 4)> explicit operator vec_base<T, 3>() const { return vec_base<T, 3>(UNPACK3(*this)); } -#undef BLI_VEC_ENABLE_IF +#undef BLI_ENABLE_IF_VEC /** Conversion from pointers (from C-style vectors). */ @@ -235,16 +235,16 @@ template<typename T, int Size> struct vec_base : public vec_struct_base<T, Size> /** Internal Operators Macro. */ -#define VEC_INT_OP(_T) template<typename U = _T, BLI_ENABLE_IF((std::is_integral_v<U>))> +#define BLI_INT_OP(_T) template<typename U = _T, BLI_ENABLE_IF((std::is_integral_v<U>))> -#define BLI_VEC_OP(_result, _i, _op) \ +#define BLI_VEC_OP_IMPL(_result, _i, _op) \ vec_base _result; \ for (int _i = 0; _i < Size; _i++) { \ _op; \ } \ return _result; -#define BLI_VEC_OP_SELF(_i, _op) \ +#define BLI_VEC_OP_IMPL_SELF(_i, _op) \ for (int _i = 0; _i < Size; _i++) { \ _op; \ } \ @@ -254,12 +254,12 @@ template<typename T, int Size> struct vec_base : public vec_struct_base<T, Size> friend vec_base operator+(const vec_base &a, const vec_base &b) { - BLI_VEC_OP(ret, i, ret[i] = a[i] + b[i]); + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] + b[i]); } friend vec_base operator+(const vec_base &a, const T &b) { - BLI_VEC_OP(ret, i, ret[i] = a[i] + b); + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] + b); } friend vec_base operator+(const T &a, const vec_base &b) @@ -269,52 +269,52 @@ template<typename T, int Size> struct vec_base : public vec_struct_base<T, Size> vec_base &operator+=(const vec_base &b) { - BLI_VEC_OP_SELF(i, (*this)[i] += b[i]); + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] += b[i]); } vec_base &operator+=(const T &b) { - BLI_VEC_OP_SELF(i, (*this)[i] += b); + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] += b); } friend vec_base operator-(const vec_base &a) { - BLI_VEC_OP(ret, i, ret[i] = -a[i]); + BLI_VEC_OP_IMPL(ret, i, ret[i] = -a[i]); } friend vec_base operator-(const vec_base &a, const vec_base &b) { - BLI_VEC_OP(ret, i, ret[i] = a[i] - b[i]); + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] - b[i]); } friend vec_base operator-(const vec_base &a, const T &b) { - BLI_VEC_OP(ret, i, ret[i] = a[i] - b); + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] - b); } friend vec_base operator-(const T &a, const vec_base &b) { - BLI_VEC_OP(ret, i, ret[i] = a - b[i]); + BLI_VEC_OP_IMPL(ret, i, ret[i] = a - b[i]); } vec_base &operator-=(const vec_base &b) { - BLI_VEC_OP_SELF(i, (*this)[i] -= b[i]); + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] -= b[i]); } vec_base &operator-=(const T &b) { - BLI_VEC_OP_SELF(i, (*this)[i] -= b); + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] -= b); } friend vec_base operator*(const vec_base &a, const vec_base &b) { - BLI_VEC_OP(ret, i, ret[i] = a[i] * b[i]); + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] * b[i]); } friend vec_base operator*(const vec_base &a, T b) { - BLI_VEC_OP(ret, i, ret[i] = a[i] * b); + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] * b); } friend vec_base operator*(T a, const vec_base &b) @@ -324,146 +324,146 @@ template<typename T, int Size> struct vec_base : public vec_struct_base<T, Size> vec_base &operator*=(T b) { - BLI_VEC_OP_SELF(i, (*this)[i] *= b); + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] *= b); } vec_base &operator*=(const vec_base &b) { - BLI_VEC_OP_SELF(i, (*this)[i] *= b[i]); + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] *= b[i]); } friend vec_base operator/(const vec_base &a, const vec_base &b) { BLI_assert(!b.is_any_zero()); - BLI_VEC_OP(ret, i, ret[i] = a[i] / b[i]); + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] / b[i]); } friend vec_base operator/(const vec_base &a, T b) { BLI_assert(b != T(0)); - BLI_VEC_OP(ret, i, ret[i] = a[i] / b); + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] / b); } friend vec_base operator/(T a, const vec_base &b) { BLI_assert(!b.is_any_zero()); - BLI_VEC_OP(ret, i, ret[i] = a / b[i]); + BLI_VEC_OP_IMPL(ret, i, ret[i] = a / b[i]); } vec_base &operator/=(T b) { BLI_assert(b != T(0)); - BLI_VEC_OP_SELF(i, (*this)[i] /= b); + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] /= b); } vec_base &operator/=(const vec_base &b) { BLI_assert(!b.is_any_zero()); - BLI_VEC_OP_SELF(i, (*this)[i] /= b[i]); + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] /= b[i]); } /** Binary operators. */ - VEC_INT_OP(T) friend vec_base operator&(const vec_base &a, const vec_base &b) + BLI_INT_OP(T) friend vec_base operator&(const vec_base &a, const vec_base &b) { - BLI_VEC_OP(ret, i, ret[i] = a[i] & b[i]); + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] & b[i]); } - VEC_INT_OP(T) friend vec_base operator&(const vec_base &a, T b) + BLI_INT_OP(T) friend vec_base operator&(const vec_base &a, T b) { - BLI_VEC_OP(ret, i, ret[i] = a[i] & b); + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] & b); } - VEC_INT_OP(T) friend vec_base operator&(T a, const vec_base &b) + BLI_INT_OP(T) friend vec_base operator&(T a, const vec_base &b) { return b & a; } - VEC_INT_OP(T) vec_base &operator&=(T b) + BLI_INT_OP(T) vec_base &operator&=(T b) { - BLI_VEC_OP_SELF(i, (*this)[i] &= b); + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] &= b); } - VEC_INT_OP(T) vec_base &operator&=(const vec_base &b) + BLI_INT_OP(T) vec_base &operator&=(const vec_base &b) { - BLI_VEC_OP_SELF(i, (*this)[i] &= b[i]); + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] &= b[i]); } - VEC_INT_OP(T) friend vec_base operator|(const vec_base &a, const vec_base &b) + BLI_INT_OP(T) friend vec_base operator|(const vec_base &a, const vec_base &b) { - BLI_VEC_OP(ret, i, ret[i] = a[i] | b[i]); + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] | b[i]); } - VEC_INT_OP(T) friend vec_base operator|(const vec_base &a, T b) + BLI_INT_OP(T) friend vec_base operator|(const vec_base &a, T b) { - BLI_VEC_OP(ret, i, ret[i] = a[i] | b); + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] | b); } - VEC_INT_OP(T) friend vec_base operator|(T a, const vec_base &b) + BLI_INT_OP(T) friend vec_base operator|(T a, const vec_base &b) { return b | a; } - VEC_INT_OP(T) vec_base &operator|=(T b) + BLI_INT_OP(T) vec_base &operator|=(T b) { - BLI_VEC_OP_SELF(i, (*this)[i] |= b); + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] |= b); } - VEC_INT_OP(T) vec_base &operator|=(const vec_base &b) + BLI_INT_OP(T) vec_base &operator|=(const vec_base &b) { - BLI_VEC_OP_SELF(i, (*this)[i] |= b[i]); + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] |= b[i]); } - VEC_INT_OP(T) friend vec_base operator^(const vec_base &a, const vec_base &b) + BLI_INT_OP(T) friend vec_base operator^(const vec_base &a, const vec_base &b) { - BLI_VEC_OP(ret, i, ret[i] = a[i] ^ b[i]); + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] ^ b[i]); } - VEC_INT_OP(T) friend vec_base operator^(const vec_base &a, T b) + BLI_INT_OP(T) friend vec_base operator^(const vec_base &a, T b) { - BLI_VEC_OP(ret, i, ret[i] = a[i] ^ b); + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] ^ b); } - VEC_INT_OP(T) friend vec_base operator^(T a, const vec_base &b) + BLI_INT_OP(T) friend vec_base operator^(T a, const vec_base &b) { return b ^ a; } - VEC_INT_OP(T) vec_base &operator^=(T b) + BLI_INT_OP(T) vec_base &operator^=(T b) { - BLI_VEC_OP_SELF(i, (*this)[i] ^= b); + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] ^= b); } - VEC_INT_OP(T) vec_base &operator^=(const vec_base &b) + BLI_INT_OP(T) vec_base &operator^=(const vec_base &b) { - BLI_VEC_OP_SELF(i, (*this)[i] ^= b[i]); + BLI_VEC_OP_IMPL_SELF(i, (*this)[i] ^= b[i]); } - VEC_INT_OP(T) friend vec_base operator~(const vec_base &a) + BLI_INT_OP(T) friend vec_base operator~(const vec_base &a) { - BLI_VEC_OP(ret, i, ret[i] = ~a[i]); + BLI_VEC_OP_IMPL(ret, i, ret[i] = ~a[i]); } /** Modulo operators. */ - VEC_INT_OP(T) friend vec_base operator%(const vec_base &a, const vec_base &b) + BLI_INT_OP(T) friend vec_base operator%(const vec_base &a, const vec_base &b) { - BLI_VEC_OP(ret, i, ret[i] = a[i] % b[i]); + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] % b[i]); } - VEC_INT_OP(T) friend vec_base operator%(const vec_base &a, T b) + BLI_INT_OP(T) friend vec_base operator%(const vec_base &a, T b) { - BLI_VEC_OP(ret, i, ret[i] = a[i] % b); + BLI_VEC_OP_IMPL(ret, i, ret[i] = a[i] % b); } - VEC_INT_OP(T) friend vec_base operator%(T a, const vec_base &b) + BLI_INT_OP(T) friend vec_base operator%(T a, const vec_base &b) { - BLI_VEC_OP(ret, i, ret[i] = a % b[i]); + BLI_VEC_OP_IMPL(ret, i, ret[i] = a % b[i]); } -#undef VEC_INT_OP -#undef BLI_VEC_OP -#undef BLI_VEC_OP_SELF +#undef BLI_INT_OP +#undef BLI_VEC_OP_IMPL +#undef BLI_VEC_OP_IMPL_SELF /** Compare. */ |