12#include "detray/algebra/concepts.hpp"
13#include "detray/definitions/detail/qualifiers.hpp"
17#pragma warning(push, 0)
24namespace detray::algebra {
27template <concepts::value value_t, concepts::matrix matrix_t>
28DETRAY_HOST_DEVICE
constexpr auto cast_to(
const matrix_t& m);
31template <concepts::value other_value_t, concepts::value value_t>
32DETRAY_HOST
constexpr auto cast_to(
const Vc::Vector<value_t>& s) {
33 using other_scalar_t = Vc::Vector<other_value_t>;
35 return Vc::simd_cast<other_scalar_t>(s);
39template <concepts::value value_t, concepts::transform3D transform_t>
40 requires Vc::is_simd_vector<typename transform_t::scalar_type>::value
41DETRAY_HOST_DEVICE
constexpr auto cast_to(
const transform_t& trf) {
42 using scalar_t = Vc::Vector<value_t>;
43 using new_trf3_t =
typename transform_t::template other_type<scalar_t>;
45 return new_trf3_t{cast_to<value_t>(trf.matrix()),
46 cast_to<value_t>(trf.matrix_inverse())};