15 #ifdef ETL_MANUAL_SELECT 24 template <
typename Selector, Selector V,
typename Expr>
25 struct selected_expr final {
29 using selector_t = Selector;
31 static constexpr selector_t selector_value = V;
36 friend struct wrapper_traits<selected_expr>;
40 selected_expr() =
delete;
46 explicit selected_expr(Expr l) : value(std::forward<Expr>(l)) {
51 selected_expr(
const selected_expr& e) =
default;
52 selected_expr(selected_expr&& e) noexcept =
default;
55 selected_expr& operator=(
const selected_expr& e) =
delete;
56 selected_expr& operator=(selected_expr&& e) =
delete;
64 bool alias(
const E& other)
const noexcept {
65 return value.alias(other);
76 decltype(
auto) forced = detail::get_forced_impl<selector_t>();
78 auto old_forced = forced;
80 forced.impl = selector_value;
94 decltype(
auto) forced = detail::get_forced_impl<selector_t>();
96 auto old_forced = forced;
98 forced.impl = selector_value;
110 template <typename L>
112 decltype(
auto) forced = detail::get_forced_impl<selector_t>();
114 auto old_forced = forced;
116 forced.impl = selector_value;
117 forced.forced = true;
128 template <typename L>
130 decltype(
auto) forced = detail::get_forced_impl<selector_t>();
132 auto old_forced = forced;
134 forced.impl = selector_value;
135 forced.forced = true;
146 template <typename L>
148 decltype(
auto) forced = detail::get_forced_impl<selector_t>();
150 auto old_forced = forced;
152 forced.impl = selector_value;
153 forced.forced = true;
164 template <typename L>
166 decltype(
auto) forced = detail::get_forced_impl<selector_t>();
168 auto old_forced = forced;
170 forced.impl = selector_value;
171 forced.forced = true;
184 friend std::ostream& operator<<(std::ostream& os, const selected_expr& expr) {
185 return os <<
"selected(" << expr.value <<
")";
193 template <
typename Selector, Selector V,
typename Expr>
194 struct etl_traits<
etl::selected_expr<Selector, V, Expr>> : wrapper_traits<etl::selected_expr<Selector, V, Expr>> {};
void assign_add_to(L &&lhs) const
Add to the given left-hand-side expression.
Definition: dyn_matrix_view.hpp:217
Contains traits for wrapper expressions.
bool alias(const E &rhs) const noexcept
Test if this expression aliases with the given expression.
Definition: dyn_matrix_view.hpp:197
void assign_div_to(L &&lhs) const
Divide the given left-hand-side expression.
Definition: dyn_matrix_view.hpp:244
value_t< sub_type > value_type
The value contained in the expression.
Definition: dyn_matrix_view.hpp:31
void assign_mul_to(L &&lhs) const
Multiply the given left-hand-side expression.
Definition: dyn_matrix_view.hpp:235
void assign_to(L &&lhs) const
Assign to the given left-hand-side expression.
Definition: dyn_matrix_view.hpp:208
Root namespace for the ETL library.
Definition: adapter.hpp:15
void assign_mod_to(L &&lhs) const
Modulo the given left-hand-side expression.
Definition: dyn_matrix_view.hpp:253
void assign_sub_to(L &&lhs) const
Sub from the given left-hand-side expression.
Definition: dyn_matrix_view.hpp:226