diff --git a/README.md b/README.md index e6bb118..50603c2 100644 --- a/README.md +++ b/README.md @@ -188,9 +188,9 @@ using size2 = vec; using size3 = vec; using size4 = vec; -using ptrdiff2 = vec; -using ptrdiff3 = vec; -using ptrdiff4 = vec; +using ptrdiff2 = vec; +using ptrdiff3 = vec; +using ptrdiff4 = vec; ``` ### Matrix Types @@ -360,9 +360,9 @@ using size2x2 = mat; using size3x3 = mat; using size4x4 = mat; -using ptrdiff2x2 = mat; -using ptrdiff3x3 = mat; -using ptrdiff4x4 = mat; +using ptrdiff2x2 = mat; +using ptrdiff3x3 = mat; +using ptrdiff4x4 = mat; ``` ### Vector Operators @@ -373,9 +373,14 @@ using ptrdiff4x4 = mat; template < typename T, size_t Size > constexpr vec operator-(const vec& xs); +// ~operator + +template < typename T, size_t Size > +constexpr vec operator~(const vec& xs); + // !operator -template < typename T, std::size_t Size > +template < typename T, size_t Size > constexpr vec operator!(const vec& xs); // operator+ @@ -454,6 +459,85 @@ constexpr vec& operator/=(vec& xs, T y); template < typename T, size_t Size > constexpr vec& operator/=(vec& xs, const vec& ys); +// operator& + +template < typename T, size_t Size > +constexpr vec operator&(const vec& xs, T y); + +template < typename T, size_t Size > +constexpr vec operator&(T x, const vec& ys); + +template < typename T, size_t Size > +constexpr vec operator&(const vec& xs, const vec& ys); + +// operator&= + +template < typename T, size_t Size > +constexpr vec& operator&=(vec& xs, T y); + +template < typename T, size_t Size > +constexpr vec& operator&=(vec& xs, const vec& ys); + +// operator| + +template < typename T, size_t Size > +constexpr vec operator|(const vec& xs, T y); + +template < typename T, size_t Size > +constexpr vec operator|(T x, const vec& ys); + +template < typename T, size_t Size > +constexpr vec operator|(const vec& xs, const vec& ys); + +// operator|= + +template < typename T, size_t Size > +constexpr vec& operator|=(vec& xs, T y); + +template < typename T, size_t Size > +constexpr vec& operator|=(vec& xs, const vec& ys); + +// operator^ + +template < typename T, size_t Size > +constexpr vec operator^(const vec& xs, T y); + +template < typename T, size_t Size > +constexpr vec operator^(T x, const vec& ys); + +template < typename T, size_t Size > +constexpr vec operator^(const vec& xs, const vec& ys); + +// operator^= + +template < typename T, size_t Size > +constexpr vec& operator^=(vec& xs, T y); + +template < typename T, size_t Size > +constexpr vec& operator^=(vec& xs, const vec& ys); + +// operator&& + +template < typename T, size_t Size > +constexpr vec operator&&(const vec& xs, T y); + +template < typename T, size_t Size > +constexpr vec operator&&(T x, const vec& ys); + +template < typename T, size_t Size > +constexpr vec operator&&(const vec& xs, const vec& ys); + +// operator|| + +template < typename T, size_t Size > +constexpr vec operator||(const vec& xs, T y); + +template < typename T, size_t Size > +constexpr vec operator||(T x, const vec& ys); + +template < typename T, size_t Size > +constexpr vec operator||(const vec& xs, const vec& ys); + // operator== template < typename T, size_t Size > @@ -476,6 +560,11 @@ constexpr bool operator<(const vec& xs, const vec& ys); template < typename T, size_t Size > constexpr mat operator-(const mat& xs); +// ~operator + +template < typename T, size_t Size > +constexpr mat operator~(const mat& xs); + // !operator template < typename T, size_t Size > @@ -552,16 +641,89 @@ constexpr mat operator/(const mat& xs, T y); template < typename T, size_t Size > constexpr mat operator/(T x, const mat& ys); -template < typename T, size_t Size > -constexpr mat operator/(const mat& xs, const mat& ys); - // operator/= template < typename T, size_t Size > constexpr mat& operator/=(mat& xs, T y); +// operator& + template < typename T, size_t Size > -constexpr mat& operator/=(mat& xs, const mat& ys); +constexpr mat operator&(const mat& xs, T y); + +template < typename T, size_t Size > +constexpr mat operator&(T x, const mat& ys); + +template < typename T, size_t Size > +constexpr mat operator&(const mat& xs, const mat& ys); + +// operator&= + +template < typename T, size_t Size > +constexpr mat& operator&=(mat& xs, T y); + +template < typename T, size_t Size > +constexpr mat& operator&=(mat& xs, const mat& ys); + +// operator| + +template < typename T, size_t Size > +constexpr mat operator|(const mat& xs, T y); + +template < typename T, size_t Size > +constexpr mat operator|(T x, const mat& ys); + +template < typename T, size_t Size > +constexpr mat operator|(const mat& xs, const mat& ys); + +// operator|= + +template < typename T, size_t Size > +constexpr mat& operator|=(mat& xs, T y); + +template < typename T, size_t Size > +constexpr mat& operator|=(mat& xs, const mat& ys); + +// operator^ + +template < typename T, size_t Size > +constexpr mat operator^(const mat& xs, T y); + +template < typename T, size_t Size > +constexpr mat operator^(T x, const mat& ys); + +template < typename T, size_t Size > +constexpr mat operator^(const mat& xs, const mat& ys); + +// operator^= + +template < typename T, size_t Size > +constexpr mat& operator^=(mat& xs, T y); + +template < typename T, size_t Size > +constexpr mat& operator^=(mat& xs, const mat& ys); + +// operator&& + +template < typename T, size_t Size > +constexpr mat operator&&(const mat& xs, T y); + +template < typename T, size_t Size > +constexpr mat operator&&(T x, const mat& ys); + +template < typename T, size_t Size > +constexpr mat operator&&(const mat& xs, const mat& ys); + +// operator|| + +template < typename T, size_t Size > +constexpr mat operator||(const mat& xs, T y); + +template < typename T, size_t Size > +constexpr mat operator||(T x, const mat& ys); + +template < typename T, size_t Size > +constexpr mat operator||(const mat& xs, const mat& ys); // operator== @@ -628,7 +790,7 @@ template < floating_point T > T atanh(T x) noexcept; template < floating_point T > -std::pair sincos(T x) noexcept; +pair sincos(T x) noexcept; template < floating_point T > void sincos(T x, T* s, T* c) noexcept; @@ -777,13 +939,13 @@ template < arithmetic T > constexpr T min(T x, T y) noexcept; template < arithmetic T, arithmetic... Ts > -constexpr std::common_type_t min(T x, T y, Ts... ts) noexcept; +constexpr common_type_t min(T x, T y, Ts... ts) noexcept; template < arithmetic T > constexpr T max(T x, T y) noexcept; template < arithmetic T, arithmetic... Ts > -constexpr std::common_type_t max(T x, T y, Ts... ts) noexcept; +constexpr common_type_t max(T x, T y, Ts... ts) noexcept; template < arithmetic T > constexpr T clamp(T x, T min_x, T max_x) noexcept; @@ -1028,76 +1190,76 @@ constexpr bool all(T x) noexcept; #### Vector ```cpp -template < typename T, std::size_t Size > +template < typename T, size_t Size > constexpr vec less(const vec& xs, T y); -template < typename T, std::size_t Size > +template < typename T, size_t Size > constexpr vec less(T x, const vec& ys); -template < typename T, std::size_t Size > +template < typename T, size_t Size > constexpr vec less(const vec& xs, const vec& ys); -template < typename T, std::size_t Size > +template < typename T, size_t Size > constexpr vec less_equal(const vec& xs, T y); -template < typename T, std::size_t Size > +template < typename T, size_t Size > constexpr vec less_equal(T x, const vec& ys); -template < typename T, std::size_t Size > +template < typename T, size_t Size > constexpr vec less_equal(const vec& xs, const vec& ys); -template < typename T, std::size_t Size > +template < typename T, size_t Size > constexpr vec greater(const vec& xs, T y); -template < typename T, std::size_t Size > +template < typename T, size_t Size > constexpr vec greater(T x, const vec& ys); -template < typename T, std::size_t Size > +template < typename T, size_t Size > constexpr vec greater(const vec& xs, const vec& ys); -template < typename T, std::size_t Size > +template < typename T, size_t Size > constexpr vec greater_equal(const vec& xs, T y); -template < typename T, std::size_t Size > +template < typename T, size_t Size > constexpr vec greater_equal(T x, const vec& ys); -template < typename T, std::size_t Size > +template < typename T, size_t Size > constexpr vec greater_equal(const vec& xs, const vec& ys); -template < typename T, std::size_t Size > +template < typename T, size_t Size > constexpr vec equal_to(const vec& xs, T y); -template < typename T, std::size_t Size > +template < typename T, size_t Size > constexpr vec equal_to(T x, const vec& ys); -template < typename T, std::size_t Size > +template < typename T, size_t Size > constexpr vec equal_to(const vec& xs, const vec& ys); -template < typename T, std::size_t Size > +template < typename T, size_t Size > constexpr vec equal_to(const vec& xs, T y, T epsilon); -template < typename T, std::size_t Size > +template < typename T, size_t Size > constexpr vec equal_to(T x, const vec& ys, T epsilon); -template < typename T, std::size_t Size > +template < typename T, size_t Size > constexpr vec equal_to(const vec& xs, const vec& ys, T epsilon); -template < typename T, std::size_t Size > +template < typename T, size_t Size > constexpr vec not_equal_to(const vec& xs, T y); -template < typename T, std::size_t Size > +template < typename T, size_t Size > constexpr vec not_equal_to(T x, const vec& ys); -template < typename T, std::size_t Size > +template < typename T, size_t Size > constexpr vec not_equal_to(const vec& xs, const vec& ys); -template < typename T, std::size_t Size > +template < typename T, size_t Size > constexpr vec not_equal_to(const vec& xs, T y, T epsilon); -template < typename T, std::size_t Size > +template < typename T, size_t Size > constexpr vec not_equal_to(T x, const vec& ys, T epsilon); -template < typename T, std::size_t Size > +template < typename T, size_t Size > constexpr vec not_equal_to(const vec& xs, const vec& ys, T epsilon); template < typename T, size_t Size > @@ -1368,7 +1530,7 @@ vec rotate(const vec& v, T angle, const vec& normal); template < typename T > vec rotate(const vec& v, T angle, const vec& normal); -template < typename T, std::size_t Size > +template < typename T, size_t Size > vec project(const vec& v, const vec& normal); ```