diff --git a/headers/vmath.hpp/vmath.hpp b/headers/vmath.hpp/vmath.hpp index 770ce34..5353745 100644 --- a/headers/vmath.hpp/vmath.hpp +++ b/headers/vmath.hpp/vmath.hpp @@ -9,5 +9,7 @@ #include "vmath_fun.hpp" #include "vmath_mat.hpp" #include "vmath_mat_fun.hpp" +#include "vmath_mat_ext.hpp" #include "vmath_vec.hpp" #include "vmath_vec_fun.hpp" +#include "vmath_vec_ext.hpp" diff --git a/headers/vmath.hpp/vmath_ext.hpp b/headers/vmath.hpp/vmath_ext.hpp new file mode 100644 index 0000000..1dd9b72 --- /dev/null +++ b/headers/vmath.hpp/vmath_ext.hpp @@ -0,0 +1,19 @@ +/******************************************************************************* + * This file is part of the "https://github.com/blackmatov/vmath.hpp" + * For conditions of distribution and use, see copyright notice in LICENSE.md + * Copyright (C) 2020, by Matvey Cherevko (blackmatov@gmail.com) + ******************************************************************************/ + +#pragma once + +#include "vmath_fwd.hpp" + +#include "vmath_fun.hpp" + +namespace vmath_hpp +{ + template < typename To, typename From > + constexpr To cast_to(From x) noexcept { + return static_cast(x); + } +} diff --git a/headers/vmath.hpp/vmath_mat_ext.hpp b/headers/vmath.hpp/vmath_mat_ext.hpp index bd431d7..11974e7 100644 --- a/headers/vmath.hpp/vmath_mat_ext.hpp +++ b/headers/vmath.hpp/vmath_mat_ext.hpp @@ -8,10 +8,24 @@ #include "vmath_fwd.hpp" +#include "vmath_ext.hpp" #include "vmath_fun.hpp" + +#include "vmath_vec.hpp" +#include "vmath_vec_fun.hpp" +#include "vmath_vec_ext.hpp" + #include "vmath_mat.hpp" #include "vmath_mat_fun.hpp" +namespace vmath_hpp +{ + template < typename To, typename From, std::size_t Size > + constexpr mat cast_to(const mat& xs) { + return detail::map([](const vec& x){ return cast_to(x); }, xs); + } +} + namespace vmath_hpp { // identity diff --git a/headers/vmath.hpp/vmath_vec_ext.hpp b/headers/vmath.hpp/vmath_vec_ext.hpp new file mode 100644 index 0000000..31095bc --- /dev/null +++ b/headers/vmath.hpp/vmath_vec_ext.hpp @@ -0,0 +1,23 @@ +/******************************************************************************* + * This file is part of the "https://github.com/blackmatov/vmath.hpp" + * For conditions of distribution and use, see copyright notice in LICENSE.md + * Copyright (C) 2020, by Matvey Cherevko (blackmatov@gmail.com) + ******************************************************************************/ + +#pragma once + +#include "vmath_fwd.hpp" + +#include "vmath_ext.hpp" +#include "vmath_fun.hpp" + +#include "vmath_vec.hpp" +#include "vmath_vec_fun.hpp" + +namespace vmath_hpp +{ + template < typename To, typename From, std::size_t Size > + constexpr vec cast_to(const vec& xs) { + return detail::map([](From x){ return cast_to(x); }, xs); + } +} diff --git a/untests/vmath_ext_tests.cpp b/untests/vmath_ext_tests.cpp new file mode 100644 index 0000000..8a30350 --- /dev/null +++ b/untests/vmath_ext_tests.cpp @@ -0,0 +1,26 @@ +/******************************************************************************* + * This file is part of the "https://github.com/blackmatov/vmath.hpp" + * For conditions of distribution and use, see copyright notice in LICENSE.md + * Copyright (C) 2020, by Matvey Cherevko (blackmatov@gmail.com) + ******************************************************************************/ + +#include + +#define CATCH_CONFIG_FAST_COMPILE +#include + +#include "vmath_tests.hpp" + +namespace +{ + using namespace vmath_hpp; + using namespace vmath_tests; +} + +TEST_CASE("vmath/ext") { + SECTION("cast_to") { + constexpr auto i = cast_to(1.5f); + STATIC_REQUIRE(i == 1); + STATIC_REQUIRE(std::is_same_v); + } +} diff --git a/untests/vmath_mat_ext_tests.cpp b/untests/vmath_mat_ext_tests.cpp index 0c7b716..403ee2f 100644 --- a/untests/vmath_mat_ext_tests.cpp +++ b/untests/vmath_mat_ext_tests.cpp @@ -18,6 +18,12 @@ namespace } TEST_CASE("vmath/mat_ext") { + SECTION("cast_to") { + constexpr auto m = cast_to(mat2f{1.5f}); + STATIC_REQUIRE(m == mat2i(1)); + STATIC_REQUIRE(std::is_same_v); + } + SECTION("identity") { STATIC_REQUIRE(vec4f(2.f,3.f,4.f,1.f) * identity() == approx4(2.f,3.f,4.f,1.f)); STATIC_REQUIRE(vec4f(2.f,3.f,4.f,1.f) * identity() == approx4(2.f,3.f,4.f,1.f)); diff --git a/untests/vmath_vec_ext_tests.cpp b/untests/vmath_vec_ext_tests.cpp new file mode 100644 index 0000000..fa1f794 --- /dev/null +++ b/untests/vmath_vec_ext_tests.cpp @@ -0,0 +1,26 @@ +/******************************************************************************* + * This file is part of the "https://github.com/blackmatov/vmath.hpp" + * For conditions of distribution and use, see copyright notice in LICENSE.md + * Copyright (C) 2020, by Matvey Cherevko (blackmatov@gmail.com) + ******************************************************************************/ + +#include + +#define CATCH_CONFIG_FAST_COMPILE +#include + +#include "vmath_tests.hpp" + +namespace +{ + using namespace vmath_hpp; + using namespace vmath_tests; +} + +TEST_CASE("vmath/vec_ext") { + SECTION("cast_to") { + constexpr auto v = cast_to(vec2f{1.5f}); + STATIC_REQUIRE(v == vec2i(1)); + STATIC_REQUIRE(std::is_same_v); + } +}