mirror of
https://github.com/BlackMATov/vmath.hpp.git
synced 2025-12-13 20:17:58 +07:00
operators non-arithmetic T support
This commit is contained in:
144
README.md
144
README.md
@@ -460,33 +460,33 @@ using qdouble = qua<double>;
|
||||
// +operator
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<T, Size> operator+(const vec<T, Size>& xs);
|
||||
constexpr auto operator+(const vec<T, Size>& xs);
|
||||
|
||||
// -operator
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<T, Size> operator-(const vec<T, Size>& xs);
|
||||
constexpr auto operator-(const vec<T, Size>& xs);
|
||||
|
||||
// ~operator
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<T, Size> operator~(const vec<T, Size>& xs);
|
||||
constexpr auto operator~(const vec<T, Size>& xs);
|
||||
|
||||
// !operator
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<bool, Size> operator!(const vec<T, Size>& xs);
|
||||
constexpr auto operator!(const vec<T, Size>& xs);
|
||||
|
||||
// operator+
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<T, Size> operator+(const vec<T, Size>& xs, T y);
|
||||
constexpr auto operator+(const vec<T, Size>& xs, T y);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<T, Size> operator+(T x, const vec<T, Size>& ys);
|
||||
constexpr auto operator+(T x, const vec<T, Size>& ys);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<T, Size> operator+(const vec<T, Size>& xs, const vec<T, Size>& ys);
|
||||
constexpr auto operator+(const vec<T, Size>& xs, const vec<T, Size>& ys);
|
||||
|
||||
// operator+=
|
||||
|
||||
@@ -499,13 +499,13 @@ constexpr vec<T, Size>& operator+=(vec<T, Size>& xs, const vec<T, Size>& ys);
|
||||
// operator-
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<T, Size> operator-(const vec<T, Size>& xs, T y);
|
||||
constexpr auto operator-(const vec<T, Size>& xs, T y);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<T, Size> operator-(T x, const vec<T, Size>& ys);
|
||||
constexpr auto operator-(T x, const vec<T, Size>& ys);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<T, Size> operator-(const vec<T, Size>& xs, const vec<T, Size>& ys);
|
||||
constexpr auto operator-(const vec<T, Size>& xs, const vec<T, Size>& ys);
|
||||
|
||||
// operator-=
|
||||
|
||||
@@ -518,13 +518,13 @@ constexpr vec<T, Size>& operator-=(vec<T, Size>& xs, const vec<T, Size>& ys);
|
||||
// operator*
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<T, Size> operator*(const vec<T, Size>& xs, T y);
|
||||
constexpr auto operator*(const vec<T, Size>& xs, T y);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<T, Size> operator*(T x, const vec<T, Size>& ys);
|
||||
constexpr auto operator*(T x, const vec<T, Size>& ys);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<T, Size> operator*(const vec<T, Size>& xs, const vec<T, Size>& ys);
|
||||
constexpr auto operator*(const vec<T, Size>& xs, const vec<T, Size>& ys);
|
||||
|
||||
// operator*=
|
||||
|
||||
@@ -537,13 +537,13 @@ constexpr vec<T, Size>& operator*=(vec<T, Size>& xs, const vec<T, Size>& ys);
|
||||
// operator/
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<T, Size> operator/(const vec<T, Size>& xs, T y);
|
||||
constexpr auto operator/(const vec<T, Size>& xs, T y);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<T, Size> operator/(T x, const vec<T, Size>& ys);
|
||||
constexpr auto operator/(T x, const vec<T, Size>& ys);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<T, Size> operator/(const vec<T, Size>& xs, const vec<T, Size>& ys);
|
||||
constexpr auto operator/(const vec<T, Size>& xs, const vec<T, Size>& ys);
|
||||
|
||||
// operator/=
|
||||
|
||||
@@ -556,13 +556,13 @@ constexpr vec<T, Size>& operator/=(vec<T, Size>& xs, const vec<T, Size>& ys);
|
||||
// operator&
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<T, Size> operator&(const vec<T, Size>& xs, T y);
|
||||
constexpr auto operator&(const vec<T, Size>& xs, T y);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<T, Size> operator&(T x, const vec<T, Size>& ys);
|
||||
constexpr auto operator&(T x, const vec<T, Size>& ys);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<T, Size> operator&(const vec<T, Size>& xs, const vec<T, Size>& ys);
|
||||
constexpr auto operator&(const vec<T, Size>& xs, const vec<T, Size>& ys);
|
||||
|
||||
// operator&=
|
||||
|
||||
@@ -575,13 +575,13 @@ constexpr vec<T, Size>& operator&=(vec<T, Size>& xs, const vec<T, Size>& ys);
|
||||
// operator|
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<T, Size> operator|(const vec<T, Size>& xs, T y);
|
||||
constexpr auto operator|(const vec<T, Size>& xs, T y);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<T, Size> operator|(T x, const vec<T, Size>& ys);
|
||||
constexpr auto operator|(T x, const vec<T, Size>& ys);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<T, Size> operator|(const vec<T, Size>& xs, const vec<T, Size>& ys);
|
||||
constexpr auto operator|(const vec<T, Size>& xs, const vec<T, Size>& ys);
|
||||
|
||||
// operator|=
|
||||
|
||||
@@ -594,13 +594,13 @@ constexpr vec<T, Size>& operator|=(vec<T, Size>& xs, const vec<T, Size>& ys);
|
||||
// operator^
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<T, Size> operator^(const vec<T, Size>& xs, T y);
|
||||
constexpr auto operator^(const vec<T, Size>& xs, T y);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<T, Size> operator^(T x, const vec<T, Size>& ys);
|
||||
constexpr auto operator^(T x, const vec<T, Size>& ys);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<T, Size> operator^(const vec<T, Size>& xs, const vec<T, Size>& ys);
|
||||
constexpr auto operator^(const vec<T, Size>& xs, const vec<T, Size>& ys);
|
||||
|
||||
// operator^=
|
||||
|
||||
@@ -613,24 +613,24 @@ constexpr vec<T, Size>& operator^=(vec<T, Size>& xs, const vec<T, Size>& ys);
|
||||
// operator&&
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<bool, Size> operator&&(const vec<T, Size>& xs, T y);
|
||||
constexpr auto operator&&(const vec<T, Size>& xs, T y);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<bool, Size> operator&&(T x, const vec<T, Size>& ys);
|
||||
constexpr auto operator&&(T x, const vec<T, Size>& ys);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<bool, Size> operator&&(const vec<T, Size>& xs, const vec<T, Size>& ys);
|
||||
constexpr auto operator&&(const vec<T, Size>& xs, const vec<T, Size>& ys);
|
||||
|
||||
// operator||
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<bool, Size> operator||(const vec<T, Size>& xs, T y);
|
||||
constexpr auto operator||(const vec<T, Size>& xs, T y);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<bool, Size> operator||(T x, const vec<T, Size>& ys);
|
||||
constexpr auto operator||(T x, const vec<T, Size>& ys);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<bool, Size> operator||(const vec<T, Size>& xs, const vec<T, Size>& ys);
|
||||
constexpr auto operator||(const vec<T, Size>& xs, const vec<T, Size>& ys);
|
||||
|
||||
// operator==
|
||||
|
||||
@@ -654,33 +654,33 @@ constexpr bool operator<(const vec<T, Size>& xs, const vec<T, Size>& ys);
|
||||
// +operator
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<T, Size> operator+(const mat<T, Size>& xs);
|
||||
constexpr auto operator+(const mat<T, Size>& xs);
|
||||
|
||||
// -operator
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<T, Size> operator-(const mat<T, Size>& xs);
|
||||
constexpr auto operator-(const mat<T, Size>& xs);
|
||||
|
||||
// ~operator
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<T, Size> operator~(const mat<T, Size>& xs);
|
||||
constexpr auto operator~(const mat<T, Size>& xs);
|
||||
|
||||
// !operator
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<bool, Size> operator!(const mat<T, Size>& xs);
|
||||
constexpr auto operator!(const mat<T, Size>& xs);
|
||||
|
||||
// operator+
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<T, Size> operator+(const mat<T, Size>& xs, T y);
|
||||
constexpr auto operator+(const mat<T, Size>& xs, T y);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<T, Size> operator+(T x, const mat<T, Size>& ys);
|
||||
constexpr auto operator+(T x, const mat<T, Size>& ys);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<T, Size> operator+(const mat<T, Size>& xs, const mat<T, Size>& ys);
|
||||
constexpr auto operator+(const mat<T, Size>& xs, const mat<T, Size>& ys);
|
||||
|
||||
// operator+=
|
||||
|
||||
@@ -693,13 +693,13 @@ constexpr mat<T, Size>& operator+=(mat<T, Size>& xs, const mat<T, Size>& ys);
|
||||
// operator-
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<T, Size> operator-(const mat<T, Size>& xs, T y);
|
||||
constexpr auto operator-(const mat<T, Size>& xs, T y);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<T, Size> operator-(T x, const mat<T, Size>& ys);
|
||||
constexpr auto operator-(T x, const mat<T, Size>& ys);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<T, Size> operator-(const mat<T, Size>& xs, const mat<T, Size>& ys);
|
||||
constexpr auto operator-(const mat<T, Size>& xs, const mat<T, Size>& ys);
|
||||
|
||||
// operator-=
|
||||
|
||||
@@ -712,16 +712,16 @@ constexpr mat<T, Size>& operator-=(mat<T, Size>& xs, const mat<T, Size>& ys);
|
||||
// operator*
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<T, Size> operator*(const mat<T, Size>& xs, T y);
|
||||
constexpr auto operator*(const mat<T, Size>& xs, T y);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<T, Size> operator*(T x, const mat<T, Size>& ys);
|
||||
constexpr auto operator*(T x, const mat<T, Size>& ys);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr vec<T, Size> operator*(const vec<T, Size>& xs, const mat<T, Size>& ys);
|
||||
constexpr auto operator*(const vec<T, Size>& xs, const mat<T, Size>& ys);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<T, Size> operator*(const mat<T, Size>& xs, const mat<T, Size>& ys);
|
||||
constexpr auto operator*(const mat<T, Size>& xs, const mat<T, Size>& ys);
|
||||
|
||||
// operator*=
|
||||
|
||||
@@ -737,10 +737,10 @@ constexpr mat<T, Size>& operator*=(mat<T, Size>& xs, const mat<T, Size>& ys);
|
||||
// operator/
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<T, Size> operator/(const mat<T, Size>& xs, T y);
|
||||
constexpr auto operator/(const mat<T, Size>& xs, T y);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<T, Size> operator/(T x, const mat<T, Size>& ys);
|
||||
constexpr auto operator/(T x, const mat<T, Size>& ys);
|
||||
|
||||
// operator/=
|
||||
|
||||
@@ -750,13 +750,13 @@ constexpr mat<T, Size>& operator/=(mat<T, Size>& xs, T y);
|
||||
// operator&
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<T, Size> operator&(const mat<T, Size>& xs, T y);
|
||||
constexpr auto operator&(const mat<T, Size>& xs, T y);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<T, Size> operator&(T x, const mat<T, Size>& ys);
|
||||
constexpr auto operator&(T x, const mat<T, Size>& ys);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<T, Size> operator&(const mat<T, Size>& xs, const mat<T, Size>& ys);
|
||||
constexpr auto operator&(const mat<T, Size>& xs, const mat<T, Size>& ys);
|
||||
|
||||
// operator&=
|
||||
|
||||
@@ -769,13 +769,13 @@ constexpr mat<T, Size>& operator&=(mat<T, Size>& xs, const mat<T, Size>& ys);
|
||||
// operator|
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<T, Size> operator|(const mat<T, Size>& xs, T y);
|
||||
constexpr auto operator|(const mat<T, Size>& xs, T y);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<T, Size> operator|(T x, const mat<T, Size>& ys);
|
||||
constexpr auto operator|(T x, const mat<T, Size>& ys);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<T, Size> operator|(const mat<T, Size>& xs, const mat<T, Size>& ys);
|
||||
constexpr auto operator|(const mat<T, Size>& xs, const mat<T, Size>& ys);
|
||||
|
||||
// operator|=
|
||||
|
||||
@@ -788,13 +788,13 @@ constexpr mat<T, Size>& operator|=(mat<T, Size>& xs, const mat<T, Size>& ys);
|
||||
// operator^
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<T, Size> operator^(const mat<T, Size>& xs, T y);
|
||||
constexpr auto operator^(const mat<T, Size>& xs, T y);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<T, Size> operator^(T x, const mat<T, Size>& ys);
|
||||
constexpr auto operator^(T x, const mat<T, Size>& ys);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<T, Size> operator^(const mat<T, Size>& xs, const mat<T, Size>& ys);
|
||||
constexpr auto operator^(const mat<T, Size>& xs, const mat<T, Size>& ys);
|
||||
|
||||
// operator^=
|
||||
|
||||
@@ -807,24 +807,24 @@ constexpr mat<T, Size>& operator^=(mat<T, Size>& xs, const mat<T, Size>& ys);
|
||||
// operator&&
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<bool, Size> operator&&(const mat<T, Size>& xs, T y);
|
||||
constexpr auto operator&&(const mat<T, Size>& xs, T y);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<bool, Size> operator&&(T x, const mat<T, Size>& ys);
|
||||
constexpr auto operator&&(T x, const mat<T, Size>& ys);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<bool, Size> operator&&(const mat<T, Size>& xs, const mat<T, Size>& ys);
|
||||
constexpr auto operator&&(const mat<T, Size>& xs, const mat<T, Size>& ys);
|
||||
|
||||
// operator||
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<bool, Size> operator||(const mat<T, Size>& xs, T y);
|
||||
constexpr auto operator||(const mat<T, Size>& xs, T y);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<bool, Size> operator||(T x, const mat<T, Size>& ys);
|
||||
constexpr auto operator||(T x, const mat<T, Size>& ys);
|
||||
|
||||
template < typename T, size_t Size >
|
||||
constexpr mat<bool, Size> operator||(const mat<T, Size>& xs, const mat<T, Size>& ys);
|
||||
constexpr auto operator||(const mat<T, Size>& xs, const mat<T, Size>& ys);
|
||||
|
||||
// operator==
|
||||
|
||||
@@ -848,17 +848,17 @@ constexpr bool operator<(const mat<T, Size>& xs, const mat<T, Size>& ys);
|
||||
// +operator
|
||||
|
||||
template < typename T >
|
||||
constexpr qua<T> operator+(const qua<T>& xs);
|
||||
constexpr auto operator+(const qua<T>& xs);
|
||||
|
||||
// -operator
|
||||
|
||||
template < typename T >
|
||||
constexpr qua<T> operator-(const qua<T>& xs);
|
||||
constexpr auto operator-(const qua<T>& xs);
|
||||
|
||||
// operator+
|
||||
|
||||
template < typename T >
|
||||
constexpr qua<T> operator+(const qua<T>& xs, const qua<T>& ys);
|
||||
constexpr auto operator+(const qua<T>& xs, const qua<T>& ys);
|
||||
|
||||
// operator+=
|
||||
|
||||
@@ -868,7 +868,7 @@ constexpr qua<T>& operator+=(qua<T>& xs, const qua<T>& ys);
|
||||
// operator-
|
||||
|
||||
template < typename T >
|
||||
constexpr qua<T> operator-(const qua<T>& xs, const qua<T>& ys);
|
||||
constexpr auto operator-(const qua<T>& xs, const qua<T>& ys);
|
||||
|
||||
// operator-=
|
||||
|
||||
@@ -878,16 +878,16 @@ constexpr qua<T>& operator-=(qua<T>& xs, const qua<T>& ys);
|
||||
// operator*
|
||||
|
||||
template < typename T >
|
||||
constexpr qua<T> operator*(const qua<T>& xs, T y);
|
||||
constexpr auto operator*(const qua<T>& xs, T y);
|
||||
|
||||
template < typename T >
|
||||
constexpr qua<T> operator*(T x, const qua<T>& ys);
|
||||
constexpr auto operator*(T x, const qua<T>& ys);
|
||||
|
||||
template < typename T >
|
||||
constexpr vec<T, 3> operator*(const vec<T, 3>& xs, const qua<T>& ys);
|
||||
constexpr auto operator*(const vec<T, 3>& xs, const qua<T>& ys);
|
||||
|
||||
template < typename T >
|
||||
constexpr qua<T> operator*(const qua<T>& xs, const qua<T>& ys);
|
||||
constexpr auto operator*(const qua<T>& xs, const qua<T>& ys);
|
||||
|
||||
// operator*=
|
||||
|
||||
@@ -903,10 +903,10 @@ constexpr qua<T>& operator*=(qua<T>& xs, const qua<T>& ys);
|
||||
// operator/
|
||||
|
||||
template < typename T >
|
||||
constexpr qua<T> operator/(const qua<T>& xs, T y);
|
||||
constexpr auto operator/(const qua<T>& xs, T y);
|
||||
|
||||
template < typename T >
|
||||
constexpr qua<T> operator/(T x, const qua<T>& ys);
|
||||
constexpr auto operator/(T x, const qua<T>& ys);
|
||||
|
||||
// operator/=
|
||||
|
||||
|
||||
@@ -195,45 +195,45 @@ namespace vmath_hpp
|
||||
// +operator
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<T, Size> operator+(const mat<T, Size>& xs) {
|
||||
[[nodiscard]] constexpr auto operator+(const mat<T, Size>& xs) {
|
||||
return xs;
|
||||
}
|
||||
|
||||
// -operator
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<T, Size> operator-(const mat<T, Size>& xs) {
|
||||
[[nodiscard]] constexpr auto operator-(const mat<T, Size>& xs) {
|
||||
return map_join([](const vec<T, Size>& x){ return -x; }, xs);
|
||||
}
|
||||
|
||||
// ~operator
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<T, Size> operator~(const mat<T, Size>& xs) {
|
||||
[[nodiscard]] constexpr auto operator~(const mat<T, Size>& xs) {
|
||||
return map_join([](const vec<T, Size>& x){ return ~x; }, xs);
|
||||
}
|
||||
|
||||
// !operator
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<bool, Size> operator!(const mat<T, Size>& xs) {
|
||||
[[nodiscard]] constexpr auto operator!(const mat<T, Size>& xs) {
|
||||
return map_join([](const vec<T, Size>& x){ return !x; }, xs);
|
||||
}
|
||||
|
||||
// operator+
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<T, Size> operator+(const mat<T, Size>& xs, T y) {
|
||||
[[nodiscard]] constexpr auto operator+(const mat<T, Size>& xs, T y) {
|
||||
return map_join([y](const vec<T, Size>& x){ return x + y; }, xs);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<T, Size> operator+(T x, const mat<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator+(T x, const mat<T, Size>& ys) {
|
||||
return map_join([x](const vec<T, Size>& y){ return x + y; }, ys);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<T, Size> operator+(const mat<T, Size>& xs, const mat<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator+(const mat<T, Size>& xs, const mat<T, Size>& ys) {
|
||||
return map_join([](const vec<T, Size>& x, const vec<T, Size>& y){ return x + y; }, xs, ys);
|
||||
}
|
||||
|
||||
@@ -252,17 +252,17 @@ namespace vmath_hpp
|
||||
// operator-
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<T, Size> operator-(const mat<T, Size>& xs, T y) {
|
||||
[[nodiscard]] constexpr auto operator-(const mat<T, Size>& xs, T y) {
|
||||
return map_join([y](const vec<T, Size>& x){ return x - y; }, xs);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<T, Size> operator-(T x, const mat<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator-(T x, const mat<T, Size>& ys) {
|
||||
return map_join([x](const vec<T, Size>& y){ return x - y; }, ys);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<T, Size> operator-(const mat<T, Size>& xs, const mat<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator-(const mat<T, Size>& xs, const mat<T, Size>& ys) {
|
||||
return map_join([](const vec<T, Size>& x, const vec<T, Size>& y){ return x - y; }, xs, ys);
|
||||
}
|
||||
|
||||
@@ -281,24 +281,24 @@ namespace vmath_hpp
|
||||
// operator*
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<T, Size> operator*(const mat<T, Size>& xs, T y) {
|
||||
[[nodiscard]] constexpr auto operator*(const mat<T, Size>& xs, T y) {
|
||||
return map_join([y](const vec<T, Size>& x){ return x * y; }, xs);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<T, Size> operator*(T x, const mat<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator*(T x, const mat<T, Size>& ys) {
|
||||
return map_join([x](const vec<T, Size>& y){ return x * y; }, ys);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<T, Size> operator*(const vec<T, Size>& xs, const mat<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator*(const vec<T, Size>& xs, const mat<T, Size>& ys) {
|
||||
return fold_join([](const vec<T, Size>& acc, T x, const vec<T, Size>& y){
|
||||
return acc + x * y;
|
||||
}, vec<T, Size>{}, xs, ys);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<T, Size> operator*(const mat<T, Size>& xs, const mat<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator*(const mat<T, Size>& xs, const mat<T, Size>& ys) {
|
||||
return map_join([&ys](const vec<T, Size>& x){
|
||||
return x * ys;
|
||||
}, xs);
|
||||
@@ -324,12 +324,12 @@ namespace vmath_hpp
|
||||
// operator/
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<T, Size> operator/(const mat<T, Size>& xs, T y) {
|
||||
[[nodiscard]] constexpr auto operator/(const mat<T, Size>& xs, T y) {
|
||||
return map_join([y](const vec<T, Size>& x){ return x / y; }, xs);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<T, Size> operator/(T x, const mat<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator/(T x, const mat<T, Size>& ys) {
|
||||
return map_join([x](const vec<T, Size>& y){ return x / y; }, ys);
|
||||
}
|
||||
|
||||
@@ -343,17 +343,17 @@ namespace vmath_hpp
|
||||
// operator&
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<T, Size> operator&(const mat<T, Size>& xs, T y) {
|
||||
[[nodiscard]] constexpr auto operator&(const mat<T, Size>& xs, T y) {
|
||||
return map_join([y](const vec<T, Size>& x){ return x & y; }, xs);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<T, Size> operator&(T x, const mat<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator&(T x, const mat<T, Size>& ys) {
|
||||
return map_join([x](const vec<T, Size>& y){ return x & y; }, ys);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<T, Size> operator&(const mat<T, Size>& xs, const mat<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator&(const mat<T, Size>& xs, const mat<T, Size>& ys) {
|
||||
return map_join([](const vec<T, Size>& x, const vec<T, Size>& y){ return x & y; }, xs, ys);
|
||||
}
|
||||
|
||||
@@ -372,17 +372,17 @@ namespace vmath_hpp
|
||||
// operator|
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<T, Size> operator|(const mat<T, Size>& xs, T y) {
|
||||
[[nodiscard]] constexpr auto operator|(const mat<T, Size>& xs, T y) {
|
||||
return map_join([y](const vec<T, Size>& x){ return x | y; }, xs);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<T, Size> operator|(T x, const mat<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator|(T x, const mat<T, Size>& ys) {
|
||||
return map_join([x](const vec<T, Size>& y){ return x | y; }, ys);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<T, Size> operator|(const mat<T, Size>& xs, const mat<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator|(const mat<T, Size>& xs, const mat<T, Size>& ys) {
|
||||
return map_join([](const vec<T, Size>& x, const vec<T, Size>& y){ return x | y; }, xs, ys);
|
||||
}
|
||||
|
||||
@@ -401,17 +401,17 @@ namespace vmath_hpp
|
||||
// operator^
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<T, Size> operator^(const mat<T, Size>& xs, T y) {
|
||||
[[nodiscard]] constexpr auto operator^(const mat<T, Size>& xs, T y) {
|
||||
return map_join([y](const vec<T, Size>& x){ return x ^ y; }, xs);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<T, Size> operator^(T x, const mat<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator^(T x, const mat<T, Size>& ys) {
|
||||
return map_join([x](const vec<T, Size>& y){ return x ^ y; }, ys);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<T, Size> operator^(const mat<T, Size>& xs, const mat<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator^(const mat<T, Size>& xs, const mat<T, Size>& ys) {
|
||||
return map_join([](const vec<T, Size>& x, const vec<T, Size>& y){ return x ^ y; }, xs, ys);
|
||||
}
|
||||
|
||||
@@ -430,34 +430,34 @@ namespace vmath_hpp
|
||||
// operator&&
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<bool, Size> operator&&(const mat<T, Size>& xs, T y) {
|
||||
[[nodiscard]] constexpr auto operator&&(const mat<T, Size>& xs, T y) {
|
||||
return map_join([y](const vec<T, Size>& x){ return x && y; }, xs);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<bool, Size> operator&&(T x, const mat<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator&&(T x, const mat<T, Size>& ys) {
|
||||
return map_join([x](const vec<T, Size>& y){ return x && y; }, ys);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<bool, Size> operator&&(const mat<T, Size>& xs, const mat<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator&&(const mat<T, Size>& xs, const mat<T, Size>& ys) {
|
||||
return map_join([](const vec<T, Size>& x, const vec<T, Size>& y){ return x && y; }, xs, ys);
|
||||
}
|
||||
|
||||
// operator||
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<bool, Size> operator||(const mat<T, Size>& xs, T y) {
|
||||
[[nodiscard]] constexpr auto operator||(const mat<T, Size>& xs, T y) {
|
||||
return map_join([y](const vec<T, Size>& x){ return x || y; }, xs);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<bool, Size> operator||(T x, const mat<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator||(T x, const mat<T, Size>& ys) {
|
||||
return map_join([x](const vec<T, Size>& y){ return x || y; }, ys);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr mat<bool, Size> operator||(const mat<T, Size>& xs, const mat<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator||(const mat<T, Size>& xs, const mat<T, Size>& ys) {
|
||||
return map_join([](const vec<T, Size>& x, const vec<T, Size>& y){ return x || y; }, xs, ys);
|
||||
}
|
||||
|
||||
|
||||
@@ -23,21 +23,21 @@ namespace vmath_hpp
|
||||
// +operator
|
||||
|
||||
template < typename T >
|
||||
[[nodiscard]] constexpr qua<T> operator+(const qua<T>& xs) {
|
||||
[[nodiscard]] constexpr auto operator+(const qua<T>& xs) {
|
||||
return xs;
|
||||
}
|
||||
|
||||
// -operator
|
||||
|
||||
template < typename T >
|
||||
[[nodiscard]] constexpr qua<T> operator-(const qua<T>& xs) {
|
||||
[[nodiscard]] constexpr auto operator-(const qua<T>& xs) {
|
||||
return qua(-vec<T, 4>{xs});
|
||||
}
|
||||
|
||||
// operator+
|
||||
|
||||
template < typename T >
|
||||
[[nodiscard]] constexpr qua<T> operator+(const qua<T>& xs, const qua<T>& ys) {
|
||||
[[nodiscard]] constexpr auto operator+(const qua<T>& xs, const qua<T>& ys) {
|
||||
return qua(vec{xs} + vec{ys});
|
||||
}
|
||||
|
||||
@@ -51,7 +51,7 @@ namespace vmath_hpp
|
||||
// operator-
|
||||
|
||||
template < typename T >
|
||||
[[nodiscard]] constexpr qua<T> operator-(const qua<T>& xs, const qua<T>& ys) {
|
||||
[[nodiscard]] constexpr auto operator-(const qua<T>& xs, const qua<T>& ys) {
|
||||
return qua(vec{xs} - vec{ys});
|
||||
}
|
||||
|
||||
@@ -65,30 +65,30 @@ namespace vmath_hpp
|
||||
// operator*
|
||||
|
||||
template < typename T >
|
||||
[[nodiscard]] constexpr qua<T> operator*(const qua<T>& xs, T y) {
|
||||
[[nodiscard]] constexpr auto operator*(const qua<T>& xs, T y) {
|
||||
return qua(vec{xs} * y);
|
||||
}
|
||||
|
||||
template < typename T >
|
||||
[[nodiscard]] constexpr qua<T> operator*(T x, const qua<T>& ys) {
|
||||
[[nodiscard]] constexpr auto operator*(T x, const qua<T>& ys) {
|
||||
return qua(x * vec{ys});
|
||||
}
|
||||
|
||||
template < typename T >
|
||||
[[nodiscard]] constexpr vec<T, 3> operator*(const vec<T, 3>& xs, const qua<T>& ys) {
|
||||
[[nodiscard]] constexpr auto operator*(const vec<T, 3>& xs, const qua<T>& ys) {
|
||||
/// REFERENCE:
|
||||
/// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/transforms/
|
||||
|
||||
const vec qv2 = cross(ys.v, xs) * T(2);
|
||||
const vec qv2 = cross(ys.v, xs) * T{2};
|
||||
return xs + qv2 * ys.s + cross(ys.v, qv2);
|
||||
}
|
||||
|
||||
template < typename T >
|
||||
[[nodiscard]] constexpr qua<T> operator*(const qua<T>& xs, const qua<T>& ys) {
|
||||
[[nodiscard]] constexpr auto operator*(const qua<T>& xs, const qua<T>& ys) {
|
||||
/// REFERENCE:
|
||||
/// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/arithmetic/
|
||||
|
||||
return {
|
||||
return qua{
|
||||
cross(ys.v, xs.v) + ys.s * xs.v + xs.s * ys.v,
|
||||
ys.s * xs.s - dot(ys.v, xs.v)};
|
||||
}
|
||||
@@ -113,12 +113,12 @@ namespace vmath_hpp
|
||||
// operator/
|
||||
|
||||
template < typename T >
|
||||
[[nodiscard]] constexpr qua<T> operator/(const qua<T>& xs, T y) {
|
||||
[[nodiscard]] constexpr auto operator/(const qua<T>& xs, T y) {
|
||||
return qua(vec{xs} / y);
|
||||
}
|
||||
|
||||
template < typename T >
|
||||
[[nodiscard]] constexpr qua<T> operator/(T x, const qua<T>& ys) {
|
||||
[[nodiscard]] constexpr auto operator/(T x, const qua<T>& ys) {
|
||||
return qua(x / vec{ys});
|
||||
}
|
||||
|
||||
|
||||
@@ -199,45 +199,45 @@ namespace vmath_hpp
|
||||
// +operator
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<T, Size> operator+(const vec<T, Size>& xs) {
|
||||
[[nodiscard]] constexpr auto operator+(const vec<T, Size>& xs) {
|
||||
return xs;
|
||||
}
|
||||
|
||||
// -operator
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<T, Size> operator-(const vec<T, Size>& xs) {
|
||||
[[nodiscard]] constexpr auto operator-(const vec<T, Size>& xs) {
|
||||
return map_join([](T x){ return -x; }, xs);
|
||||
}
|
||||
|
||||
// ~operator
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<T, Size> operator~(const vec<T, Size>& xs) {
|
||||
[[nodiscard]] constexpr auto operator~(const vec<T, Size>& xs) {
|
||||
return map_join([](T x){ return ~x; }, xs);
|
||||
}
|
||||
|
||||
// !operator
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<bool, Size> operator!(const vec<T, Size>& xs) {
|
||||
[[nodiscard]] constexpr auto operator!(const vec<T, Size>& xs) {
|
||||
return map_join([](T x){ return !x; }, xs);
|
||||
}
|
||||
|
||||
// operator+
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<T, Size> operator+(const vec<T, Size>& xs, T y) {
|
||||
[[nodiscard]] constexpr auto operator+(const vec<T, Size>& xs, T y) {
|
||||
return map_join([y](T x){ return x + y; }, xs);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<T, Size> operator+(T x, const vec<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator+(T x, const vec<T, Size>& ys) {
|
||||
return map_join([x](T y){ return x + y; }, ys);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<T, Size> operator+(const vec<T, Size>& xs, const vec<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator+(const vec<T, Size>& xs, const vec<T, Size>& ys) {
|
||||
return map_join([](T x, T y){ return x + y; }, xs, ys);
|
||||
}
|
||||
|
||||
@@ -256,17 +256,17 @@ namespace vmath_hpp
|
||||
// operator-
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<T, Size> operator-(const vec<T, Size>& xs, T y) {
|
||||
[[nodiscard]] constexpr auto operator-(const vec<T, Size>& xs, T y) {
|
||||
return map_join([y](T x){ return x - y; }, xs);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<T, Size> operator-(T x, const vec<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator-(T x, const vec<T, Size>& ys) {
|
||||
return map_join([x](T y){ return x - y; }, ys);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<T, Size> operator-(const vec<T, Size>& xs, const vec<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator-(const vec<T, Size>& xs, const vec<T, Size>& ys) {
|
||||
return map_join([](T x, T y){ return x - y; }, xs, ys);
|
||||
}
|
||||
|
||||
@@ -285,17 +285,17 @@ namespace vmath_hpp
|
||||
// operator*
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<T, Size> operator*(const vec<T, Size>& xs, T y) {
|
||||
[[nodiscard]] constexpr auto operator*(const vec<T, Size>& xs, T y) {
|
||||
return map_join([y](T x){ return x * y; }, xs);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<T, Size> operator*(T x, const vec<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator*(T x, const vec<T, Size>& ys) {
|
||||
return map_join([x](T y){ return x * y; }, ys);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<T, Size> operator*(const vec<T, Size>& xs, const vec<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator*(const vec<T, Size>& xs, const vec<T, Size>& ys) {
|
||||
return map_join([](T x, T y){ return x * y; }, xs, ys);
|
||||
}
|
||||
|
||||
@@ -314,17 +314,17 @@ namespace vmath_hpp
|
||||
// operator/
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<T, Size> operator/(const vec<T, Size>& xs, T y) {
|
||||
[[nodiscard]] constexpr auto operator/(const vec<T, Size>& xs, T y) {
|
||||
return map_join([y](T x){ return x / y; }, xs);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<T, Size> operator/(T x, const vec<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator/(T x, const vec<T, Size>& ys) {
|
||||
return map_join([x](T y){ return x / y; }, ys);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<T, Size> operator/(const vec<T, Size>& xs, const vec<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator/(const vec<T, Size>& xs, const vec<T, Size>& ys) {
|
||||
return map_join([](T x, T y){ return x / y; }, xs, ys);
|
||||
}
|
||||
|
||||
@@ -343,17 +343,17 @@ namespace vmath_hpp
|
||||
// operator&
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<T, Size> operator&(const vec<T, Size>& xs, T y) {
|
||||
[[nodiscard]] constexpr auto operator&(const vec<T, Size>& xs, T y) {
|
||||
return map_join([y](T x){ return x & y; }, xs);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<T, Size> operator&(T x, const vec<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator&(T x, const vec<T, Size>& ys) {
|
||||
return map_join([x](T y){ return x & y; }, ys);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<T, Size> operator&(const vec<T, Size>& xs, const vec<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator&(const vec<T, Size>& xs, const vec<T, Size>& ys) {
|
||||
return map_join([](T x, T y){ return x & y; }, xs, ys);
|
||||
}
|
||||
|
||||
@@ -372,17 +372,17 @@ namespace vmath_hpp
|
||||
// operator|
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<T, Size> operator|(const vec<T, Size>& xs, T y) {
|
||||
[[nodiscard]] constexpr auto operator|(const vec<T, Size>& xs, T y) {
|
||||
return map_join([y](T x){ return x | y; }, xs);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<T, Size> operator|(T x, const vec<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator|(T x, const vec<T, Size>& ys) {
|
||||
return map_join([x](T y){ return x | y; }, ys);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<T, Size> operator|(const vec<T, Size>& xs, const vec<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator|(const vec<T, Size>& xs, const vec<T, Size>& ys) {
|
||||
return map_join([](T x, T y){ return x | y; }, xs, ys);
|
||||
}
|
||||
|
||||
@@ -401,17 +401,17 @@ namespace vmath_hpp
|
||||
// operator^
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<T, Size> operator^(const vec<T, Size>& xs, T y) {
|
||||
[[nodiscard]] constexpr auto operator^(const vec<T, Size>& xs, T y) {
|
||||
return map_join([y](T x){ return x ^ y; }, xs);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<T, Size> operator^(T x, const vec<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator^(T x, const vec<T, Size>& ys) {
|
||||
return map_join([x](T y){ return x ^ y; }, ys);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<T, Size> operator^(const vec<T, Size>& xs, const vec<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator^(const vec<T, Size>& xs, const vec<T, Size>& ys) {
|
||||
return map_join([](T x, T y){ return x ^ y; }, xs, ys);
|
||||
}
|
||||
|
||||
@@ -430,34 +430,34 @@ namespace vmath_hpp
|
||||
// operator&&
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<bool, Size> operator&&(const vec<T, Size>& xs, T y) {
|
||||
[[nodiscard]] constexpr auto operator&&(const vec<T, Size>& xs, T y) {
|
||||
return map_join([y](T x){ return x && y; }, xs);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<bool, Size> operator&&(T x, const vec<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator&&(T x, const vec<T, Size>& ys) {
|
||||
return map_join([x](T y){ return x && y; }, ys);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<bool, Size> operator&&(const vec<T, Size>& xs, const vec<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator&&(const vec<T, Size>& xs, const vec<T, Size>& ys) {
|
||||
return map_join([](T x, T y){ return x && y; }, xs, ys);
|
||||
}
|
||||
|
||||
// operator||
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<bool, Size> operator||(const vec<T, Size>& xs, T y) {
|
||||
[[nodiscard]] constexpr auto operator||(const vec<T, Size>& xs, T y) {
|
||||
return map_join([y](T x){ return x || y; }, xs);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<bool, Size> operator||(T x, const vec<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator||(T x, const vec<T, Size>& ys) {
|
||||
return map_join([x](T y){ return x || y; }, ys);
|
||||
}
|
||||
|
||||
template < typename T, std::size_t Size >
|
||||
[[nodiscard]] constexpr vec<bool, Size> operator||(const vec<T, Size>& xs, const vec<T, Size>& ys) {
|
||||
[[nodiscard]] constexpr auto operator||(const vec<T, Size>& xs, const vec<T, Size>& ys) {
|
||||
return map_join([](T x, T y){ return x || y; }, xs, ys);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user