diff --git a/src/tenvex/expressions/add.h b/src/tenvex/expressions/add.h index e9eac64..7d271ea 100644 --- a/src/tenvex/expressions/add.h +++ b/src/tenvex/expressions/add.h @@ -19,12 +19,12 @@ struct Add : Expr> private: tnvx_ref_or_value_t _l; - tnvx_ref_or_value_t _r; + tnvx_ref_or_value_t _r; }; template [[nodiscard]] TNVX_INLINE -Add operator+(const L& TNVX_RESTRICT l, const R& TNVX_RESTRICT r) noexcept; +Add operator+(const L& l, const R& r) noexcept; template inline constexpr bool is_vec_expr> = true; diff --git a/src/tenvex/expressions/add_impl.hpp b/src/tenvex/expressions/add_impl.hpp index f5b894f..b4fc79b 100644 --- a/src/tenvex/expressions/add_impl.hpp +++ b/src/tenvex/expressions/add_impl.hpp @@ -22,7 +22,7 @@ vf4 Add::eval() const noexcept template [[nodiscard]] TNVX_INLINE -Add operator+(const L& TNVX_RESTRICT l, const R& TNVX_RESTRICT r) noexcept +Add operator+(const L& l, const R& r) noexcept { return { l, r }; } diff --git a/src/tenvex/expressions/cross3.h b/src/tenvex/expressions/cross3.h index 7834f00..a0342e7 100644 --- a/src/tenvex/expressions/cross3.h +++ b/src/tenvex/expressions/cross3.h @@ -24,7 +24,7 @@ private: template [[nodiscard]] TNVX_INLINE -Cross3 cross3(const L& TNVX_RESTRICT l, const R& TNVX_RESTRICT r) noexcept; +Cross3 cross3(const L& l, const R& r) noexcept; template inline constexpr bool is_vec_expr> = true; diff --git a/src/tenvex/expressions/cross3_impl.hpp b/src/tenvex/expressions/cross3_impl.hpp index cd13a74..b5c577a 100644 --- a/src/tenvex/expressions/cross3_impl.hpp +++ b/src/tenvex/expressions/cross3_impl.hpp @@ -22,7 +22,7 @@ vf4 Cross3::eval() const noexcept template TNVX_INLINE -Cross3 cross3(const L& TNVX_RESTRICT l, const R& TNVX_RESTRICT r) noexcept +Cross3 cross3(const L& l, const R& r) noexcept { return { l, r }; } diff --git a/src/tenvex/expressions/div.h b/src/tenvex/expressions/div.h index eabaf0d..b72b0f2 100644 --- a/src/tenvex/expressions/div.h +++ b/src/tenvex/expressions/div.h @@ -26,7 +26,7 @@ private: template [[nodiscard]] TNVX_INLINE -Div operator/(const E& TNVX_RESTRICT l, float r) noexcept; +Div operator/(const E& l, float r) noexcept; template inline constexpr bool is_vec_expr> = true; diff --git a/src/tenvex/expressions/div_impl.hpp b/src/tenvex/expressions/div_impl.hpp index a32acf9..30512c5 100644 --- a/src/tenvex/expressions/div_impl.hpp +++ b/src/tenvex/expressions/div_impl.hpp @@ -22,7 +22,7 @@ vf4 Div::eval() const noexcept template TNVX_INLINE -Div operator/(const E& TNVX_RESTRICT l, float r) noexcept +Div operator/(const E& l, float r) noexcept { return { l, Scalar(r) }; } diff --git a/src/tenvex/expressions/dot3.h b/src/tenvex/expressions/dot3.h index f2984d2..e9a45d6 100644 --- a/src/tenvex/expressions/dot3.h +++ b/src/tenvex/expressions/dot3.h @@ -27,7 +27,7 @@ private: template [[nodiscard]] TNVX_INLINE -Dot3 dot3(const L& TNVX_RESTRICT l, const R& TNVX_RESTRICT r) noexcept; +Dot3 dot3(const L& l, const R& r) noexcept; template inline constexpr bool is_scalar_expr> = true; diff --git a/src/tenvex/expressions/dot3_impl.h b/src/tenvex/expressions/dot3_impl.h index ba55fdc..03cadd6 100644 --- a/src/tenvex/expressions/dot3_impl.h +++ b/src/tenvex/expressions/dot3_impl.h @@ -29,7 +29,7 @@ Dot3::operator float() const noexcept template TNVX_INLINE -Dot3 dot3(const L& TNVX_RESTRICT l, const R& TNVX_RESTRICT r) noexcept +Dot3 dot3(const L& l, const R& r) noexcept { return { l, r }; } diff --git a/src/tenvex/expressions/magnitude3.h b/src/tenvex/expressions/magnitude3.h index cc28bf2..543cbf8 100644 --- a/src/tenvex/expressions/magnitude3.h +++ b/src/tenvex/expressions/magnitude3.h @@ -26,7 +26,7 @@ private: template TNVX_INLINE -Magn3 magnitude3(const E& TNVX_RESTRICT e) noexcept; +Magn3 magnitude3(const E& e) noexcept; template inline constexpr bool is_scalar_expr> = true; diff --git a/src/tenvex/expressions/magnitude3_impl.hpp b/src/tenvex/expressions/magnitude3_impl.hpp index 099951f..c75e97d 100644 --- a/src/tenvex/expressions/magnitude3_impl.hpp +++ b/src/tenvex/expressions/magnitude3_impl.hpp @@ -29,7 +29,7 @@ Magn3::operator float() const noexcept template TNVX_INLINE -Magn3 magnitude3(const E& TNVX_RESTRICT e) noexcept +Magn3 magnitude3(const E& e) noexcept { return Magn3(e); } diff --git a/src/tenvex/expressions/mul.h b/src/tenvex/expressions/mul.h index be8478e..7dc8c24 100644 --- a/src/tenvex/expressions/mul.h +++ b/src/tenvex/expressions/mul.h @@ -26,15 +26,15 @@ private: template [[nodiscard]] TNVX_INLINE -Mul operator*(const E& TNVX_RESTRICT l, float r) noexcept; +Mul operator*(const E& l, float r) noexcept; template [[nodiscard]] TNVX_INLINE -Mul operator*(float l, const E& TNVX_RESTRICT r) noexcept; +Mul operator*(float l, const E& r) noexcept; template [[nodiscard]] TNVX_INLINE -Mul operator*(const L& TNVX_RESTRICT l, const R& TNVX_RESTRICT r) noexcept; +Mul operator*(const L& l, const R& r) noexcept; template inline constexpr bool is_vec_expr> = true; template inline constexpr bool is_vec_expr> = true; diff --git a/src/tenvex/expressions/mul_impl.hpp b/src/tenvex/expressions/mul_impl.hpp index efa8464..4cb02ee 100644 --- a/src/tenvex/expressions/mul_impl.hpp +++ b/src/tenvex/expressions/mul_impl.hpp @@ -22,21 +22,21 @@ vf4 Mul::eval() const noexcept template TNVX_INLINE -Mul operator*(const E& TNVX_RESTRICT l, float r) noexcept +Mul operator*(const E& l, float r) noexcept { return { l, Scalar(r) }; } template TNVX_INLINE -Mul operator*(float l, const E& TNVX_RESTRICT r) noexcept +Mul operator*(float l, const E& r) noexcept { return { Scalar(l), r }; } template TNVX_INLINE -Mul operator*(const L& TNVX_RESTRICT l, const R& TNVX_RESTRICT r) noexcept +Mul operator*(const L& l, const R& r) noexcept { return { l, r }; } diff --git a/src/tenvex/expressions/norm3.h b/src/tenvex/expressions/norm3.h index f7a650a..5449744 100644 --- a/src/tenvex/expressions/norm3.h +++ b/src/tenvex/expressions/norm3.h @@ -23,7 +23,7 @@ private: template [[nodiscard]] TNVX_INLINE -Norm3 norm3(const E& TNVX_RESTRICT e) noexcept; +Norm3 norm3(const E& e) noexcept; template inline constexpr bool is_vec_expr> = true; diff --git a/src/tenvex/expressions/norm3_impl.hpp b/src/tenvex/expressions/norm3_impl.hpp index cbf6f6a..9e89f4d 100644 --- a/src/tenvex/expressions/norm3_impl.hpp +++ b/src/tenvex/expressions/norm3_impl.hpp @@ -21,7 +21,7 @@ vf4 Norm3::eval() const noexcept template TNVX_INLINE -Norm3 norm3(const E& TNVX_RESTRICT e) noexcept +Norm3 norm3(const E& e) noexcept { return Norm3(e); } diff --git a/src/tenvex/expressions/scalar.h b/src/tenvex/expressions/scalar.h index 53c97e6..487e954 100644 --- a/src/tenvex/expressions/scalar.h +++ b/src/tenvex/expressions/scalar.h @@ -20,6 +20,8 @@ private: vf4 _value; }; +static_assert(is_stored_by_value_v, "Scalar must be stored by value"); + template<> inline constexpr bool is_scalar_expr = true; diff --git a/src/tenvex/expressions/sub.h b/src/tenvex/expressions/sub.h index d5cd754..bd618c0 100644 --- a/src/tenvex/expressions/sub.h +++ b/src/tenvex/expressions/sub.h @@ -24,7 +24,7 @@ private: template [[nodiscard]] TNVX_INLINE -Sub operator-(const L& TNVX_RESTRICT l, const R& TNVX_RESTRICT r) noexcept; +Sub operator-(const L& l, const R& r) noexcept; template inline constexpr bool is_vec_expr> = true; diff --git a/src/tenvex/expressions/sub_impl.hpp b/src/tenvex/expressions/sub_impl.hpp index 2864019..368ada7 100644 --- a/src/tenvex/expressions/sub_impl.hpp +++ b/src/tenvex/expressions/sub_impl.hpp @@ -22,7 +22,7 @@ vf4 Sub::eval() const noexcept template TNVX_INLINE -Sub operator-(const L& TNVX_RESTRICT l, const R& TNVX_RESTRICT r) noexcept +Sub operator-(const L& l, const R& r) noexcept { return { l, r }; } diff --git a/src/tenvex/expressions/vec4.h b/src/tenvex/expressions/vec4.h index d82f317..9b6bac9 100644 --- a/src/tenvex/expressions/vec4.h +++ b/src/tenvex/expressions/vec4.h @@ -18,7 +18,7 @@ struct alignas(16) vec4 : Expr template TNVX_INLINE - vec4(const E& TNVX_RESTRICT e) noexcept; + vec4(const E& e) noexcept; [[nodiscard]] TNVX_INLINE vf4 eval() const noexcept; diff --git a/src/tenvex/expressions/vec4_impl.hpp b/src/tenvex/expressions/vec4_impl.hpp index 73b3659..c58236d 100644 --- a/src/tenvex/expressions/vec4_impl.hpp +++ b/src/tenvex/expressions/vec4_impl.hpp @@ -19,7 +19,7 @@ __m128 vec4::eval() const noexcept template TNVX_INLINE -vec4::vec4(const E& TNVX_RESTRICT e) noexcept +vec4::vec4(const E& e) noexcept : _data(e.eval()) { } diff --git a/src/tests/vec4_tests.cpp b/src/tests/vec4_tests.cpp index b3e5965..096f021 100644 --- a/src/tests/vec4_tests.cpp +++ b/src/tests/vec4_tests.cpp @@ -169,7 +169,7 @@ TEST(vec4, dot_commutative) TEST(vec4, norm_magnitude) { vec4 a = { 3.0f, 1.0f, 4.0f, 0.0f }; - EXPECT_NEAR(magnitude3(norm3(a)), 1.0f, 1e-5f); + EXPECT_NEAR(magnitude3(norm3(a)), 1.0f, 1e-6f); } TEST(vec4, dot_perpendicular)