11#include "detray/algebra/concepts.hpp"
12#include "detray/definitions/detail/qualifiers.hpp"
18namespace detray::algebra::storage {
22template <
template <
typename, std::
size_t>
class array_t,
24DETRAY_HOST_DEVICE
constexpr array_t<scalar_t, N>
operator*(
25 const array_t<scalar_t, N> &a, scalar_t s)
noexcept {
26 array_t<scalar_t, N> result;
27 for (std::size_t i = 0u; i < N; ++i) {
34template <
template <
typename, std::
size_t>
class array_t,
35 concepts::scalar scalar_t, std::size_t N>
36DETRAY_HOST_DEVICE
constexpr array_t<scalar_t, N> operator*(
37 scalar_t s,
const array_t<scalar_t, N> &a)
noexcept {
38 array_t<scalar_t, N> result;
39 for (std::size_t i = 0u; i < N; ++i) {
46template <
template <
typename, std::
size_t>
class array_t,
47 concepts::scalar scalar_t, std::size_t N>
48DETRAY_HOST_DEVICE
constexpr array_t<scalar_t, N>
operator-(
49 const array_t<scalar_t, N> &a,
const array_t<scalar_t, N> &b)
noexcept {
50 array_t<scalar_t, N> result;
51 for (std::size_t i = 0u; i < N; ++i) {
52 result[i] = a[i] - b[i];
58template <
template <
typename, std::
size_t>
class array_t,
59 concepts::scalar scalar_t, std::size_t N>
60DETRAY_HOST_DEVICE
constexpr array_t<scalar_t, N>
operator+(
61 const array_t<scalar_t, N> &a,
const array_t<scalar_t, N> &b)
noexcept {
62 array_t<scalar_t, N> result;
63 for (std::size_t i = 0u; i < N; ++i) {
64 result[i] = a[i] + b[i];
70template <
template <
typename, std::
size_t>
class array_t,
71 concepts::scalar scalar_t, std::size_t N>
72DETRAY_HOST_DEVICE
constexpr array_t<scalar_t, N> operator*(
73 const array_t<scalar_t, N> &a,
const array_t<scalar_t, N> &b)
noexcept {
74 array_t<scalar_t, N> result;
75 for (std::size_t i = 0u; i < N; ++i) {
76 result[i] = a[i] * b[i];
82template <
template <
typename, std::
size_t>
class array_t,
83 concepts::scalar scalar_t, std::size_t N>
84DETRAY_HOST_DEVICE
constexpr array_t<scalar_t, N>
operator/(
85 const array_t<scalar_t, N> &a,
const array_t<scalar_t, N> &b)
noexcept {
86 array_t<scalar_t, N> result;
87 for (std::size_t i = 0u; i < N; ++i) {
88 result[i] = a[i] / b[i];
Scalar concept: Elements of vectors/matrices (can be simd vectors).
Definition concepts.hpp:40
constexpr array_t< scalar1_t, 2 > operator*(const array_t< scalar1_t, 2 > &a, scalar2_t s)
Multiply an array-backed vector by a scalar.
Definition array_operators.hpp:26
constexpr array_t< scalar_t, N > operator/(const array_t< scalar_t, N > &a, const array_t< scalar_t, N > &b) noexcept
Divide compatible SoA vectors component-wise.
Definition array_operators.hpp:84
constexpr array_t< scalar_t, 2 > operator+(const array_t< scalar_t, 2 > &a, const array_t< scalar_t, 2 > &b)
Add array-backed vectors component-wise.
Definition array_operators.hpp:47
constexpr array_t< scalar_t, 2 > operator-(const array_t< scalar_t, 2 > &a, const array_t< scalar_t, 2 > &b)
Subtract array-backed vectors component-wise.
Definition array_operators.hpp:40