16 #ifndef OPENKALMAN_VECTOR_SPACE_DESCRIPTORS_ARITHMETIC_OPERATORS_HPP 17 #define OPENKALMAN_VECTOR_SPACE_DESCRIPTORS_ARITHMETIC_OPERATORS_HPP 24 #include "linear-algebra/coordinates/descriptors/DynamicDescriptor.hpp" 25 #include "linear-algebra/coordinates/descriptors/internal/Concatenate.hpp" 26 #include "linear-algebra/coordinates/descriptors/internal/Replicate.hpp" 34 template<pattern T, pattern U>
36 template<
typename T,
typename U, std::enable_if_t<pattern<T> and pattern<U>,
int> = 0>
38 constexpr
auto operator+(T&& t, U&& u)
40 if constexpr (euclidean_pattern<T> and euclidean_pattern<U>)
42 if constexpr (fixed_pattern<T> and fixed_pattern<U>)
47 else return coordinates::internal::Concatenate {std::forward<T>(t), std::forward<U>(u)};
55 template<pattern Arg, values::index N>
57 template<
typename Arg,
typename N, std::enable_if_t<pattern<Arg> and values::index<N>,
int> = 0>
59 constexpr
auto operator*(Arg&& arg,
const N& n)
61 if constexpr (euclidean_pattern<Arg>)
67 return internal::Replicate {std::forward<Arg>(arg), n};
77 template<values::index N, pattern Arg>
79 template<
typename N,
typename Arg, std::enable_if_t<pattern<Arg> and values::index<N>,
int> = 0>
81 constexpr
auto operator*(
const N& n, Arg&& arg)
83 return operator*(std::forward<Arg>(arg), n);
90 #endif //OPENKALMAN_VECTOR_SPACE_DESCRIPTORS_ARITHMETIC_OPERATORS_HPP Definition for coordinates::euclidean_pattern.
An operation involving some number of values.
Definition: operation.hpp:69
Definition of the Dimensions class.
Definition for coordinates::fixed_pattern.
Definition for coordinates::pattern.
constexpr auto get_dimension(const Arg &arg)
Get the vector dimension of coordinates::pattern Arg.
Definition: get_dimension.hpp:55
Definition: compares_with.hpp:28
A structure representing the dimensions associated with of a particular index.
Definition: Dimensions.hpp:42
Definition for coordinates::dimension_of.