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