1#ifndef TATOOINE_UNARY_OPERATION_FIELD_H
2#define TATOOINE_UNARY_OPERATION_FIELD_H
9template <
typename Field,
typename Op>
10requires (is_field<Field>) &&
11 (invocable<Op, field_tensor_type<Field>>)
13 :
field<unary_operation_field<Field, Op>, field_real_type<Field>,
14 field_num_dimensions<Field>,
15 std::invoke_result_t<Op, field_tensor_type<Field>>> {
21 std::invoke_result_t<Op, field_tensor_type<Field>>>;
32 template <convertible_to<Field> Field_, convertible_to<Op> Op_>
36 template <convertible_to<Op> Op_>
38 requires std::is_pointer_v<std::decay_t<Field>>
55 if constexpr (std::is_pointer_v<std::decay_t<Field>>) {
66template <
typename Field,
typename Op>
67requires (!std::is_pointer_v<std::decay_t<Field>>)
71template <
typename Field,
typename Op>
72requires (!std::is_pointer_v<Field>)
76template <
typename Field,
typename Op>
77requires (!std::is_pointer_v<Field>)
81template <
typename Field,
typename Op>
82requires (!std::is_pointer_v<std::decay_t<Field>>)
86template <
typename Field,
typename Op>
87requires (!std::is_pointer_v<Field>)
91template <
typename Field,
typename Op>
92requires (!std::is_pointer_v<Field>)
96template <
typename Field,
typename Op>
97requires (!std::is_pointer_v<std::decay_t<Field>>)
101template <
typename Field,
typename Op>
102requires (!std::is_pointer_v<Field>)
106template <
typename Field,
typename Op>
107requires (!std::is_pointer_v<Field>)
111template <
typename Field,
typename Op>
115template <
typename Field,
typename Op>
119template <
typename Field,
typename Op>
124 std::forward<Op>(op)};
127template <
typename Real,
size_t N,
typename Tensor,
typename Op>
128requires (invocable<Op, Tensor>)
Definition: concepts.h:121
Definition: algorithm.h:6
constexpr auto operator|(Field &&field, Op &&op)
Definition: unary_operation_field.h:122
static constexpr forward_tag forward
Definition: tags.h:9
typename std::decay_t< std::remove_pointer_t< std::decay_t< Field > > >::tensor_type field_tensor_type
Definition: field_type_traits.h:14
Real real_type
Definition: field.h:17
vec< real_type, NumDimensions > pos_type
Definition: field.h:20
Tensor tensor_type
Definition: field.h:18
Definition: unary_operation_field.h:15
Field internal_field_type
Definition: unary_operation_field.h:18
constexpr auto evaluate(pos_type const &x, real_type const t) const -> tensor_type
Definition: unary_operation_field.h:53
Op m_op
Definition: unary_operation_field.h:29
constexpr unary_operation_field(unary_operation_field &&) noexcept=default
constexpr unary_operation_field(Field_ &&field, Op_ &&op)
Definition: unary_operation_field.h:33
auto internal_field() -> decltype(auto)
Definition: unary_operation_field.h:63
Real real_type
Definition: field.h:17
auto internal_field() const -> decltype(auto)
Definition: unary_operation_field.h:62
constexpr unary_operation_field(unary_operation_field const &)=default
Field m_field
Definition: unary_operation_field.h:28
constexpr unary_operation_field(Op_ &&op)
Definition: unary_operation_field.h:37