mirror of
https://github.com/BlackMATov/vmath.hpp.git
synced 2025-12-13 12:15:56 +07:00
add zero and identity ctors
This commit is contained in:
11
README.md
11
README.md
@@ -89,6 +89,7 @@ public:
|
||||
|
||||
vec_base();
|
||||
explicit vec_base(uninit_t);
|
||||
explicit vec_base(zero_init_t);
|
||||
|
||||
explicit vec_base(T v);
|
||||
vec_base(T x, T y);
|
||||
@@ -101,6 +102,7 @@ public:
|
||||
|
||||
vec_base();
|
||||
explicit vec_base(uninit_t);
|
||||
explicit vec_base(zero_init_t);
|
||||
|
||||
explicit vec_base(T v);
|
||||
vec_base(T x, T y, T z);
|
||||
@@ -117,6 +119,7 @@ public:
|
||||
|
||||
vec_base();
|
||||
explicit vec_base(uninit_t);
|
||||
explicit vec_base(zero_init_t);
|
||||
|
||||
explicit vec_base(T v);
|
||||
vec_base(T x, T y, T z, T w);
|
||||
@@ -221,6 +224,8 @@ public:
|
||||
|
||||
mat_base();
|
||||
explicit mat_base(uninit_t);
|
||||
explicit mat_base(zero_init_t);
|
||||
explicit mat_base(identity_init_t);
|
||||
|
||||
explicit mat_base(T d);
|
||||
explicit mat_base(const row_type& d);
|
||||
@@ -242,6 +247,8 @@ public:
|
||||
|
||||
mat_base();
|
||||
explicit mat_base(uninit_t);
|
||||
explicit mat_base(zero_init_t);
|
||||
explicit mat_base(identity_init_t);
|
||||
|
||||
explicit mat_base(T d);
|
||||
explicit mat_base(const row_type& d);
|
||||
@@ -273,6 +280,8 @@ public:
|
||||
|
||||
mat_base();
|
||||
explicit mat_base(uninit_t);
|
||||
explicit mat_base(zero_init_t);
|
||||
explicit mat_base(identity_init_t);
|
||||
|
||||
explicit mat_base(T d);
|
||||
explicit mat_base(const row_type& d);
|
||||
@@ -389,6 +398,8 @@ public:
|
||||
|
||||
qua_base();
|
||||
explicit qua_base(uninit_t);
|
||||
explicit qua_base(zero_init_t);
|
||||
explicit qua_base(identity_init_t);
|
||||
|
||||
qua_base(T vx, T vy, T vz, T s);
|
||||
qua_base(const vec<T, 3>& v, T s);
|
||||
|
||||
@@ -42,6 +42,12 @@ namespace vmath_hpp
|
||||
{
|
||||
struct uninit_t { explicit uninit_t() = default; };
|
||||
inline constexpr uninit_t uninit{};
|
||||
|
||||
struct zero_init_t { explicit zero_init_t() = default; };
|
||||
inline constexpr zero_init_t zero_init{};
|
||||
|
||||
struct identity_init_t { explicit identity_init_t() = default; };
|
||||
inline constexpr identity_init_t identity_init{};
|
||||
}
|
||||
|
||||
namespace vmath_hpp
|
||||
|
||||
@@ -23,12 +23,20 @@ namespace vmath_hpp::detail
|
||||
row_type rows[2];
|
||||
public:
|
||||
constexpr mat_base()
|
||||
: mat_base(identity_init) {}
|
||||
|
||||
constexpr explicit mat_base(uninit_t) {}
|
||||
|
||||
constexpr explicit mat_base(zero_init_t)
|
||||
: rows{
|
||||
{T{0}, T{0}},
|
||||
{T{0}, T{0}}} {}
|
||||
|
||||
constexpr explicit mat_base(identity_init_t)
|
||||
: rows{
|
||||
{T{1}, T{0}},
|
||||
{T{0}, T{1}}} {}
|
||||
|
||||
constexpr explicit mat_base(uninit_t) {}
|
||||
|
||||
constexpr explicit mat_base(T d)
|
||||
: rows{
|
||||
{d, T{0}},
|
||||
@@ -59,13 +67,22 @@ namespace vmath_hpp::detail
|
||||
row_type rows[3];
|
||||
public:
|
||||
constexpr mat_base()
|
||||
: mat_base(identity_init) {}
|
||||
|
||||
constexpr explicit mat_base(uninit_t) {}
|
||||
|
||||
constexpr explicit mat_base(zero_init_t)
|
||||
: rows{
|
||||
{T{0}, T{0}, T{0}},
|
||||
{T{0}, T{0}, T{0}},
|
||||
{T{0}, T{0}, T{0}}} {}
|
||||
|
||||
constexpr explicit mat_base(identity_init_t)
|
||||
: rows{
|
||||
{T{1}, T{0}, T{0}},
|
||||
{T{0}, T{1}, T{0}},
|
||||
{T{0}, T{0}, T{1}}} {}
|
||||
|
||||
constexpr explicit mat_base(uninit_t) {}
|
||||
|
||||
constexpr explicit mat_base(T d)
|
||||
: rows{
|
||||
{d, T{0}, T{0}},
|
||||
@@ -122,14 +139,24 @@ namespace vmath_hpp::detail
|
||||
row_type rows[4];
|
||||
public:
|
||||
constexpr mat_base()
|
||||
: mat_base(identity_init) {}
|
||||
|
||||
constexpr explicit mat_base(uninit_t) {}
|
||||
|
||||
constexpr explicit mat_base(zero_init_t)
|
||||
: rows{
|
||||
{T{0}, T{0}, T{0}, T{0}},
|
||||
{T{0}, T{0}, T{0}, T{0}},
|
||||
{T{0}, T{0}, T{0}, T{0}},
|
||||
{T{0}, T{0}, T{0}, T{0}}} {}
|
||||
|
||||
constexpr explicit mat_base(identity_init_t)
|
||||
: rows{
|
||||
{T{1}, T{0}, T{0}, T{0}},
|
||||
{T{0}, T{1}, T{0}, T{0}},
|
||||
{T{0}, T{0}, T{1}, T{0}},
|
||||
{T{0}, T{0}, T{0}, T{1}}} {}
|
||||
|
||||
constexpr explicit mat_base(uninit_t) {}
|
||||
|
||||
constexpr explicit mat_base(T d)
|
||||
: rows{
|
||||
{d, T{0}, T{0}, T{0}},
|
||||
|
||||
@@ -20,10 +20,16 @@ namespace vmath_hpp::detail
|
||||
T s;
|
||||
public:
|
||||
constexpr qua_base()
|
||||
: v{T{0}}, s{1} {}
|
||||
: qua_base(identity_init) {}
|
||||
|
||||
constexpr explicit qua_base(uninit_t) {}
|
||||
|
||||
constexpr explicit qua_base(zero_init_t)
|
||||
: v{T{0}}, s{0} {}
|
||||
|
||||
constexpr explicit qua_base(identity_init_t)
|
||||
: v{T{0}}, s{1} {}
|
||||
|
||||
constexpr qua_base(T vx, T vy, T vz, T s)
|
||||
: v{vx, vy, vz}, s{s} {}
|
||||
|
||||
|
||||
@@ -19,10 +19,13 @@ namespace vmath_hpp::detail
|
||||
T x, y;
|
||||
public:
|
||||
constexpr vec_base()
|
||||
: x{0}, y{0} {}
|
||||
: vec_base(zero_init) {}
|
||||
|
||||
constexpr explicit vec_base(uninit_t) {}
|
||||
|
||||
constexpr explicit vec_base(zero_init_t)
|
||||
: x{0}, y{0} {}
|
||||
|
||||
constexpr explicit vec_base(T v)
|
||||
: x{v}, y{v} {}
|
||||
|
||||
@@ -52,10 +55,13 @@ namespace vmath_hpp::detail
|
||||
T x, y, z;
|
||||
public:
|
||||
constexpr vec_base()
|
||||
: x{0}, y{0}, z{0} {}
|
||||
: vec_base(zero_init) {}
|
||||
|
||||
constexpr explicit vec_base(uninit_t) {}
|
||||
|
||||
constexpr explicit vec_base(zero_init_t)
|
||||
: x{0}, y{0}, z{0} {}
|
||||
|
||||
constexpr explicit vec_base(T v)
|
||||
: x{v}, y{v}, z{v} {}
|
||||
|
||||
@@ -97,10 +103,13 @@ namespace vmath_hpp::detail
|
||||
T x, y, z, w;
|
||||
public:
|
||||
constexpr vec_base()
|
||||
: x{0}, y{0}, z{0}, w{0} {}
|
||||
: vec_base(zero_init) {}
|
||||
|
||||
constexpr explicit vec_base(uninit_t) {}
|
||||
|
||||
constexpr explicit vec_base(zero_init_t)
|
||||
: x{0}, y{0}, z{0}, w{0} {}
|
||||
|
||||
constexpr explicit vec_base(T v)
|
||||
: x{v}, y{v}, z{v}, w{v} {}
|
||||
|
||||
|
||||
@@ -55,6 +55,22 @@ TEST_CASE("vmath/mat") {
|
||||
CHECK(m4.rows[1] == int4(0,1,0,0));
|
||||
CHECK(m4.rows[2] == int4(0,0,1,0));
|
||||
CHECK(m4.rows[3] == int4(0,0,0,1));
|
||||
|
||||
STATIC_CHECK(int2x2() == int2x2({1,0},{0,1}));
|
||||
STATIC_CHECK(int3x3() == int3x3({1,0,0},{0,1,0},{0,0,1}));
|
||||
STATIC_CHECK(int4x4() == int4x4({1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}));
|
||||
|
||||
(void)int2x2(uninit);
|
||||
(void)int3x3(uninit);
|
||||
(void)int4x4(uninit);
|
||||
|
||||
STATIC_CHECK(int2x2(zero_init) == int2x2({0,0},{0,0}));
|
||||
STATIC_CHECK(int3x3(zero_init) == int3x3({0,0,0},{0,0,0},{0,0,0}));
|
||||
STATIC_CHECK(int4x4(zero_init) == int4x4({0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}));
|
||||
|
||||
STATIC_CHECK(int2x2(identity_init) == int2x2({1,0},{0,1}));
|
||||
STATIC_CHECK(int3x3(identity_init) == int3x3({1,0,0},{0,1,0},{0,0,1}));
|
||||
STATIC_CHECK(int4x4(identity_init) == int4x4({1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}));
|
||||
}
|
||||
{
|
||||
STATIC_CHECK(int2x2()[0] == int2(1,0));
|
||||
|
||||
@@ -34,6 +34,11 @@ TEST_CASE("vmath/qua") {
|
||||
qua<int> q;
|
||||
CHECK(q.v == int3(0,0,0));
|
||||
CHECK(q.s == 1);
|
||||
|
||||
STATIC_CHECK(qua<int>() == qua<int>({0,0,0},1));
|
||||
(void)qua<int>(uninit);
|
||||
STATIC_CHECK(qua<int>(zero_init) == qua<int>({0,0,0},0));
|
||||
STATIC_CHECK(qua<int>(identity_init) == qua<int>({0,0,0},1));
|
||||
}
|
||||
{
|
||||
STATIC_CHECK(qfloat{}.v == uapprox3(0.f));
|
||||
|
||||
@@ -55,6 +55,18 @@ TEST_CASE("vmath/vec") {
|
||||
CHECK(i4.y == 0);
|
||||
CHECK(i4.z == 0);
|
||||
CHECK(i4.w == 0);
|
||||
|
||||
STATIC_CHECK(int2() == int2(0,0));
|
||||
STATIC_CHECK(int3() == int3(0,0,0));
|
||||
STATIC_CHECK(int4() == int4(0,0,0,0));
|
||||
|
||||
(void)int2(uninit);
|
||||
(void)int3(uninit);
|
||||
(void)int4(uninit);
|
||||
|
||||
STATIC_CHECK(int2(zero_init) == int2(0,0));
|
||||
STATIC_CHECK(int3(zero_init) == int3(0,0,0));
|
||||
STATIC_CHECK(int4(zero_init) == int4(0,0,0,0));
|
||||
}
|
||||
{
|
||||
STATIC_CHECK(int2().x == 0);
|
||||
|
||||
Reference in New Issue
Block a user