remove uninit ctors

This commit is contained in:
BlackMATov
2020-11-22 04:01:17 +07:00
parent ab23e30cd5
commit 59739ea85b
4 changed files with 12 additions and 23 deletions

View File

@@ -16,12 +16,6 @@
#include <type_traits> #include <type_traits>
#include <utility> #include <utility>
namespace vmath_hpp
{
struct uninit_t {};
inline constexpr uninit_t uninit;
}
namespace vmath_hpp namespace vmath_hpp
{ {
template < typename T, std::size_t Size > template < typename T, std::size_t Size >

View File

@@ -24,8 +24,6 @@ namespace vmath_hpp::detail
{0, 1}, {0, 1},
} {} } {}
constexpr explicit mat_base(uninit_t) {}
constexpr explicit mat_base(T v) constexpr explicit mat_base(T v)
: rows{ : rows{
{v, 0}, {v, 0},
@@ -67,8 +65,6 @@ namespace vmath_hpp::detail
{0, 0, 1}, {0, 0, 1},
} {} } {}
constexpr explicit mat_base(uninit_t) {}
constexpr explicit mat_base(T v) constexpr explicit mat_base(T v)
: rows{ : rows{
{v, 0, 0}, {v, 0, 0},
@@ -117,8 +113,6 @@ namespace vmath_hpp::detail
{0, 0, 0, 1}, {0, 0, 0, 1},
} {} } {}
constexpr explicit mat_base(uninit_t) {}
constexpr explicit mat_base(T v) constexpr explicit mat_base(T v)
: rows{ : rows{
{v, 0, 0, 0}, {v, 0, 0, 0},
@@ -190,6 +184,8 @@ namespace vmath_hpp
using base_type::rows; using base_type::rows;
using base_type::mat_base; using base_type::mat_base;
mat() = default;
mat(mat&&) = default; mat(mat&&) = default;
mat& operator=(mat&&) = default; mat& operator=(mat&&) = default;

View File

@@ -16,10 +16,9 @@ namespace vmath_hpp::detail
template < typename T > template < typename T >
class vec_base<T, 2> { class vec_base<T, 2> {
public: public:
T data[2]; T data[2]{};
public: public:
constexpr vec_base() : data{} {} vec_base() = default;
constexpr explicit vec_base(uninit_t) {}
constexpr explicit vec_base(T v) constexpr explicit vec_base(T v)
: data{v, v} {} : data{v, v} {}
@@ -43,10 +42,9 @@ namespace vmath_hpp::detail
template < typename T > template < typename T >
class vec_base<T, 3> { class vec_base<T, 3> {
public: public:
T data[3]; T data[3]{};
public: public:
constexpr vec_base() : data{} {} vec_base() = default;
constexpr explicit vec_base(uninit_t) {}
constexpr explicit vec_base(T v) constexpr explicit vec_base(T v)
: data{v, v, v} {} : data{v, v, v} {}
@@ -76,10 +74,9 @@ namespace vmath_hpp::detail
template < typename T > template < typename T >
class vec_base<T, 4> { class vec_base<T, 4> {
public: public:
T data[4]; T data[4]{};
public: public:
constexpr vec_base() : data{} {} vec_base() = default;
constexpr explicit vec_base(uninit_t) {}
constexpr explicit vec_base(T v) constexpr explicit vec_base(T v)
: data{v, v, v, v} {} : data{v, v, v, v} {}
@@ -147,6 +144,8 @@ namespace vmath_hpp
using base_type::data; using base_type::data;
using base_type::vec_base; using base_type::vec_base;
vec() = default;
vec(vec&&) = default; vec(vec&&) = default;
vec& operator=(vec&&) = default; vec& operator=(vec&&) = default;

View File

@@ -13,7 +13,7 @@ namespace vmath_hpp::detail
{ {
template < typename T, std::size_t Size, typename F > template < typename T, std::size_t Size, typename F >
constexpr auto map(const vec<T, Size>& v, F&& f) { constexpr auto map(const vec<T, Size>& v, F&& f) {
vec<std::invoke_result_t<F,T>, Size> result(uninit); vec<std::invoke_result_t<F, T>, Size> result;
for ( std::size_t i = 0; i < Size; ++i ) { for ( std::size_t i = 0; i < Size; ++i ) {
result[i] = f(v[i]); result[i] = f(v[i]);
} }
@@ -22,7 +22,7 @@ namespace vmath_hpp::detail
template < typename T, typename U, std::size_t Size, typename F > template < typename T, typename U, std::size_t Size, typename F >
constexpr auto zip(const vec<T, Size>& l, const vec<U, Size>& r, F&& f) { constexpr auto zip(const vec<T, Size>& l, const vec<U, Size>& r, F&& f) {
vec<std::invoke_result_t<F, T, U>, Size> result(uninit); vec<std::invoke_result_t<F, T, U>, Size> result;
for ( std::size_t i = 0; i < Size; ++i ) { for ( std::size_t i = 0; i < Size; ++i ) {
result[i] = f(l[i], r[i]); result[i] = f(l[i], r[i]);
} }