Tatooine
tensor_cast.h
Go to the documentation of this file.
1#ifndef TATOOINE_TENSOR_CAST_H
2#define TATOOINE_TENSOR_CAST_H
3//==============================================================================
4#include <tatooine/mat.h>
5#include <tatooine/vec.h>
6//==============================================================================
7namespace tatooine {
8//==============================================================================
9template <typename CastReal, typename Real, size_t N>
12}
13template <typename CastReal, typename Real, size_t M, size_t N>
16}
17template <typename CastReal, typename Real, size_t... Dims>
20}
21
22template <typename CastedReal, typename Tensor>
24 using type =
25 decltype(cast_tensor_type_impl<CastedReal>(std::declval<Tensor>()));
26};
27
28template <typename CastedReal, typename Tensor>
30
31//==============================================================================
32template <typename NewReal, typename Tensor, typename Real, size_t... Dims>
34 auto casted = tensor<NewReal, Dims...>::zeros;
35 for (size_t i = 0; i < casted.num_components(); ++i) {
36 casted[i] = static_cast<NewReal>(to_cast[i]);
37 }
38 return casted;
39}
40//------------------------------------------------------------------------------
41template <typename NewReal, typename Real, size_t M, size_t N>
42auto cast(const mat<Real, M, N>& to_cast) {
43 auto casted = mat<NewReal, M, N>::zeros();
44 for (size_t i = 0; i < M * N; ++i) {
45 casted[i] = static_cast<NewReal>(to_cast[i]);
46 }
47 return casted;
48}
49//------------------------------------------------------------------------------
50template <typename NewReal, typename Real, size_t N>
51auto cast(const vec<Real, N>& to_cast) {
52 auto casted = vec<NewReal, N>::zeros();
53 for (size_t i = 0; i < N; ++i) {
54 casted[i] = static_cast<NewReal>(to_cast[i]);
55 }
56 return casted;
57}
58//==============================================================================
59} // namespace tatooine
60//==============================================================================
61#endif
Definition: algorithm.h:6
tensor< real_number, Dimensions... > Tensor
Definition: tensor.h:184
auto cast(const base_tensor< Tensor, Real, Dims... > &to_cast)
Definition: tensor_cast.h:33
auto cast_tensor_type_impl(const vec< Real, N > &)
Definition: tensor_cast.h:10
typename cast_tensor_real< CastedReal, Tensor >::type cast_tensor_real_type
Definition: tensor_cast.h:29
Definition: base_tensor.h:23
Definition: tensor_cast.h:23
decltype(cast_tensor_type_impl< CastedReal >(std::declval< Tensor >())) type
Definition: tensor_cast.h:25
Definition: mat.h:14
static auto constexpr zeros()
Definition: mat.h:36
Definition: tensor.h:17
static constexpr auto zeros()
Definition: tensor.h:144
Definition: vec.h:12
static auto constexpr zeros()
Definition: vec.h:26