3#ifndef pRC_CORE_TENSOR_VIEWS_ASSIGNABLE_H
4#define pRC_CORE_TENSOR_VIEWS_ASSIGNABLE_H
20 template<
class T,
class N,
class F>
42 template<
class X,
class R = RemoveReference<X>,
43 If<All<IsConvertible<R, T>,
44 IsSatisfied<(
typename Base::Dimension() == 0)>>> = 0>
47 (*this)() = forward<X>(value);
51 template<
class X,
class R = RemoveReference<X>, If<IsTensorish<R>> = 0,
52 If<IsSame<
typename Base::Sizes,
typename R::Sizes>> = 0,
53 If<IsConvertible<
typename R::Type, T>> = 0>
59 [
this, &
rhs](
auto const i)
75 template<
class X, If<IsInvocable<Add, F, X>> = 0>
82 template<
class X, If<IsInvocable<Sub, F, X>> = 0>
89 template<
class X, If<IsInvocable<Mul, X, F>> = 0>
102 if constexpr(
typename U::Dimension() == 0)
104 this->self() =
eval(forward<X>(
lhs)) * this->self();
109 this->self() =
eval(forward<X>(
lhs) * this->self());
113 template<
class X, If<IsInvocable<Mul, F, X>> = 0>
126 if constexpr(
typename U::Dimension() == 0)
128 this->self() = this->self() *
eval(forward<X>(
rhs));
133 this->self() =
eval(this->self() * forward<X>(
rhs));
137 template<
class X, If<IsInvocable<Mul, F, X>> = 0>
143 template<
class X, If<IsInvocable<Div, F, X>> = 0>
Definition assignable.hpp:22
constexpr auto operator/=(X &&rhs)
Definition assignable.hpp:144
constexpr auto operator+=(X &&rhs)
Definition assignable.hpp:76
constexpr Assignable()=default
constexpr Assignable(Assignable const &)=default
constexpr Assignable(Assignable &&)=default
constexpr auto & operator=(Zero<> const)
Definition assignable.hpp:27
constexpr auto & operator=(X &&rhs)
Definition assignable.hpp:54
constexpr auto operator*=(X &&rhs)
Definition assignable.hpp:138
constexpr auto & operator=(Identity<> const)
Definition assignable.hpp:37
constexpr auto & operator=(X &&value)
Definition assignable.hpp:45
constexpr Assignable & operator=(Assignable &&)=delete
constexpr auto operator-=(X &&rhs)
Definition assignable.hpp:83
constexpr auto applyOnTheLeft(X &&lhs)
Definition assignable.hpp:90
constexpr auto & operator=(Unit<> const)
Definition assignable.hpp:32
constexpr Assignable & operator=(Assignable const &)=delete
constexpr auto applyOnTheRight(X &&rhs)
Definition assignable.hpp:114
Definition type_traits.hpp:32
Definition diagonal.hpp:11
static constexpr X eval(X &&a)
Definition eval.hpp:11
static constexpr auto makeConstantSequence()
Definition sequence.hpp:402
std::remove_reference_t< T > RemoveReference
Definition type_traits.hpp:56
Definition type_traits.hpp:262
Definition type_traits.hpp:265
Definition type_traits.hpp:268