mirror of
https://github.com/BlackMATov/vmath.hpp.git
synced 2025-12-16 14:11:28 +07:00
vector and matrix deduction guides
This commit is contained in:
@@ -230,6 +230,44 @@ namespace vmath_hpp
|
|||||||
return rows[index];
|
return rows[index];
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace vmath_hpp
|
||||||
|
{
|
||||||
|
// mat2
|
||||||
|
|
||||||
|
template < typename T >
|
||||||
|
mat(T, T, T, T) -> mat<T, 2>;
|
||||||
|
|
||||||
|
template < typename T >
|
||||||
|
mat(const vec<T, 2>&, const vec<T, 2>&) -> mat<T, 2>;
|
||||||
|
|
||||||
|
template < typename T >
|
||||||
|
mat(std::initializer_list<T>, std::initializer_list<T>) -> mat<T, 2>;
|
||||||
|
|
||||||
|
// mat3
|
||||||
|
|
||||||
|
template < typename T >
|
||||||
|
mat(T, T, T, T, T, T, T, T, T) -> mat<T, 3>;
|
||||||
|
|
||||||
|
template < typename T >
|
||||||
|
mat(const vec<T, 3>&, const vec<T, 3>&, const vec<T, 3>&) -> mat<T, 3>;
|
||||||
|
|
||||||
|
template < typename T >
|
||||||
|
mat(std::initializer_list<T>, std::initializer_list<T>, std::initializer_list<T>) -> mat<T, 3>;
|
||||||
|
|
||||||
|
// mat4
|
||||||
|
|
||||||
|
template < typename T >
|
||||||
|
mat(T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T) -> mat<T, 4>;
|
||||||
|
|
||||||
|
template < typename T >
|
||||||
|
mat(const vec<T, 4>&, const vec<T, 4>&, const vec<T, 4>&, const vec<T, 4>&) -> mat<T, 4>;
|
||||||
|
|
||||||
|
template < typename T >
|
||||||
|
mat(std::initializer_list<T>, std::initializer_list<T>, std::initializer_list<T>, std::initializer_list<T>) -> mat<T, 4>;
|
||||||
|
|
||||||
|
// swap
|
||||||
|
|
||||||
template < typename T, std::size_t Size >
|
template < typename T, std::size_t Size >
|
||||||
void swap(mat<T, Size>& l, mat<T, Size>& r) noexcept(noexcept(l.swap(r))) {
|
void swap(mat<T, Size>& l, mat<T, Size>& r) noexcept(noexcept(l.swap(r))) {
|
||||||
|
|||||||
@@ -189,6 +189,50 @@ namespace vmath_hpp
|
|||||||
return (*this)[index];
|
return (*this)[index];
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace vmath_hpp
|
||||||
|
{
|
||||||
|
// vec2
|
||||||
|
|
||||||
|
template < typename T >
|
||||||
|
vec(T, T) -> vec<T, 2>;
|
||||||
|
|
||||||
|
// vec3
|
||||||
|
|
||||||
|
template < typename T >
|
||||||
|
vec(T, T, T) -> vec<T, 3>;
|
||||||
|
|
||||||
|
template < typename T >
|
||||||
|
vec(const vec<T, 2>&, T) -> vec<T, 3>;
|
||||||
|
|
||||||
|
template < typename T >
|
||||||
|
vec(T, const vec<T, 2>&) -> vec<T, 3>;
|
||||||
|
|
||||||
|
// vec4
|
||||||
|
|
||||||
|
template < typename T >
|
||||||
|
vec(T, T, T, T) -> vec<T, 4>;
|
||||||
|
|
||||||
|
template < typename T >
|
||||||
|
vec(const vec<T, 2>&, T, T) -> vec<T, 4>;
|
||||||
|
|
||||||
|
template < typename T >
|
||||||
|
vec(T, const vec<T, 2>&, T) -> vec<T, 4>;
|
||||||
|
|
||||||
|
template < typename T >
|
||||||
|
vec(T, T, const vec<T, 2>&) -> vec<T, 4>;
|
||||||
|
|
||||||
|
template < typename T >
|
||||||
|
vec(const vec<T, 2>&, const vec<T, 2>&) -> vec<T, 4>;
|
||||||
|
|
||||||
|
template < typename T >
|
||||||
|
vec(const vec<T, 3>&, T) -> vec<T, 4>;
|
||||||
|
|
||||||
|
template < typename T >
|
||||||
|
vec(T, const vec<T, 3>&) -> vec<T, 4>;
|
||||||
|
|
||||||
|
// swap
|
||||||
|
|
||||||
template < typename T, std::size_t Size >
|
template < typename T, std::size_t Size >
|
||||||
void swap(vec<T, Size>& l, vec<T, Size>& r) noexcept(noexcept(l.swap(r))) {
|
void swap(vec<T, Size>& l, vec<T, Size>& r) noexcept(noexcept(l.swap(r))) {
|
||||||
|
|||||||
@@ -24,6 +24,20 @@ TEST_CASE("vmath/mat") {
|
|||||||
STATIC_REQUIRE(sizeof(int4x4{}) == sizeof(int) * 4 * 4);
|
STATIC_REQUIRE(sizeof(int4x4{}) == sizeof(int) * 4 * 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SUBCASE("guides") {
|
||||||
|
STATIC_REQUIRE(mat{1,2,3,4}.size == 2);
|
||||||
|
STATIC_REQUIRE(mat{{1,2},{3,4}}.size == 2);
|
||||||
|
STATIC_REQUIRE(mat{vec{1,2},vec{3,4}}.size == 2);
|
||||||
|
|
||||||
|
STATIC_REQUIRE(mat{1,2,3,4,5,6,7,8,9}.size == 3);
|
||||||
|
STATIC_REQUIRE(mat{{1,2,3},{4,5,6},{7,8,9}}.size == 3);
|
||||||
|
STATIC_REQUIRE(mat{vec{1,2,3},vec{4,5,6},vec{7,8,9}}.size == 3);
|
||||||
|
|
||||||
|
STATIC_REQUIRE(mat{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}.size == 4);
|
||||||
|
STATIC_REQUIRE(mat{{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}.size == 4);
|
||||||
|
STATIC_REQUIRE(mat{vec{1,2,3,4},vec{5,6,7,8},vec{9,10,11,12},vec{13,14,15,16}}.size == 4);
|
||||||
|
}
|
||||||
|
|
||||||
SUBCASE("ctors") {
|
SUBCASE("ctors") {
|
||||||
{
|
{
|
||||||
STATIC_REQUIRE(int2x2()[0] == int2(1,0));
|
STATIC_REQUIRE(int2x2()[0] == int2(1,0));
|
||||||
|
|||||||
@@ -24,6 +24,22 @@ TEST_CASE("vmath/vec") {
|
|||||||
STATIC_REQUIRE(sizeof(int4{}) == sizeof(int) * 4);
|
STATIC_REQUIRE(sizeof(int4{}) == sizeof(int) * 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SUBCASE("guides") {
|
||||||
|
STATIC_REQUIRE(vec{1,2}.size == 2);
|
||||||
|
|
||||||
|
STATIC_REQUIRE(vec{1,2,3}.size == 3);
|
||||||
|
STATIC_REQUIRE(vec{{1,2},3}.size == 3);
|
||||||
|
STATIC_REQUIRE(vec{1,{2,3}}.size == 3);
|
||||||
|
|
||||||
|
STATIC_REQUIRE(vec{1,2,3,4}.size == 4);
|
||||||
|
STATIC_REQUIRE(vec{vec{1,2},3,4}.size == 4);
|
||||||
|
STATIC_REQUIRE(vec{1,vec{2,3},4}.size == 4);
|
||||||
|
STATIC_REQUIRE(vec{1,2,vec{3,4}}.size == 4);
|
||||||
|
STATIC_REQUIRE(vec{vec{1,2},vec{3,4}}.size == 4);
|
||||||
|
STATIC_REQUIRE(vec{vec{1,2,3},4}.size == 4);
|
||||||
|
STATIC_REQUIRE(vec{1,vec{2,3,4}}.size == 4);
|
||||||
|
}
|
||||||
|
|
||||||
SUBCASE("ctors") {
|
SUBCASE("ctors") {
|
||||||
{
|
{
|
||||||
STATIC_REQUIRE(int2().x == 0);
|
STATIC_REQUIRE(int2().x == 0);
|
||||||
|
|||||||
Reference in New Issue
Block a user