Tatooine
binary_operation.h
Go to the documentation of this file.
1#ifndef TATOOINE_FLOWEXPLORER_NODES_BINARY_OPERATION_H
2#define TATOOINE_FLOWEXPLORER_NODES_BINARY_OPERATION_H
3//==============================================================================
6#include <tatooine/real.h>
7//==============================================================================
9//==============================================================================
10struct binary_operation : ui::node<binary_operation> {
11 template <typename Lhs, typename Rhs, typename Op>
13
14 template <size_t LhsN, size_t RhsN, typename Op>
18 template <size_t LhsN, size_t RhsN, typename Op>
22
23 enum class operation_t : int {
28 dot
29 };
30 static constexpr auto mult = [](auto const& lhs, auto const& rhs) {
31 return lhs * rhs;
32 };
33 static constexpr auto dot = [](auto const& lhs, auto const& rhs) {
34 return tatooine::dot(lhs, rhs);
35 };
36
37 template <size_t N>
38 using mat_vec_mult_field_t = op_field_mat_vec<N, N, decltype(mult)>;
41 template <size_t N>
42 using dot_field_t = op_field_vec_vec<N, N, decltype(dot)>;
45
46 // output data
47 std::variant<std::monostate,
54
55 int m_operation = 0;
63
65 virtual ~binary_operation() = default;
66 auto draw_properties() -> bool override;
67 auto on_property_changed() -> void override;
69 auto on_pin_disconnected(ui::input_pin&) -> void override;
70 auto deactivate_output_pins() -> void;
71};
72//==============================================================================
73} // namespace tatooine::flowexplorer::nodes
74//==============================================================================
77 TATOOINE_REFLECTION_INSERT_METHOD(scalar_operation, m_operation));
78#endif
TATOOINE_FLOWEXPLORER_REGISTER_NODE(tatooine::flowexplorer::nodes::binary_operation, TATOOINE_REFLECTION_INSERT_METHOD(scalar_operation, m_operation))
Definition: abcflow.h:7
constexpr auto dot(base_tensor< Tensor0, T0, N > const &lhs, base_tensor< Tensor1, T1, N > const &rhs)
Definition: tensor_operations.h:120
Definition: binary_operation_field.h:16
Definition: binary_operation.h:10
ui::output_pin & m_scalar_pin_out
Definition: binary_operation.h:58
ui::output_pin & m_mat_vec_mult_field3_pin_out
Definition: binary_operation.h:62
mat_vec_mult_field_t< 2 > mat_vec_mult_field2_t
Definition: binary_operation.h:39
std::variant< std::monostate, real_type, dot_field2_t, dot_field3_t, mat_vec_mult_field2_t, mat_vec_mult_field3_t > m_output_data
Definition: binary_operation.h:53
ui::input_pin & m_input0
Definition: binary_operation.h:56
dot_field_t< 2 > dot_field2_t
Definition: binary_operation.h:43
dot_field_t< 3 > dot_field3_t
Definition: binary_operation.h:44
ui::output_pin & m_dot_field3_pin_out
Definition: binary_operation.h:60
static constexpr auto mult
Definition: binary_operation.h:30
static constexpr auto dot
Definition: binary_operation.h:33
operation_t
Definition: binary_operation.h:23
auto on_pin_connected(ui::input_pin &, ui::output_pin &) -> void override
ui::input_pin & m_input1
Definition: binary_operation.h:57
int m_operation
Definition: binary_operation.h:55
ui::output_pin & m_mat_vec_mult_field2_pin_out
Definition: binary_operation.h:61
ui::output_pin & m_dot_field2_pin_out
Definition: binary_operation.h:59
auto on_pin_disconnected(ui::input_pin &) -> void override
Definition: scene.h:17
Definition: node.h:382
Definition: field.h:13