13 using ExecNode = safe_node<Node>;
16 typename ExecNode::control_input_values_type& arr;
17 QPointer<Model> element;
19 template <avnd::dynamic_ports_port Field, std::
size_t N, std::
size_t NField>
20 void operator()(Field& field, avnd::predicate_index<N>, avnd::field_index<NField>)
24 for(
auto p : element->avnd_input_idx_to_model_ports(NField))
26 if(
auto inlet = qobject_cast<Process::ControlInlet*>(p))
35 template <
typename Field, std::
size_t N, std::
size_t NField>
36 void operator()(Field& field, avnd::predicate_index<N>, avnd::field_index<NField>)
40 auto p = element->avnd_input_idx_to_model_ports(NField)[0];
41 if(
auto inlet = qobject_cast<Process::ControlInlet*>(p))
44 inlet->setExecutionValue(oscr::to_ossia_value(field, get<N>(arr)));
52 using ExecNode = safe_node<Node>;
54 typename ExecNode::control_output_values_type& arr;
55 QPointer<Model> element;
57 template <
typename Field, std::
size_t N, std::
size_t NField>
58 void operator()(Field& field, avnd::predicate_index<N>, avnd::field_index<NField>)
63 auto ports = element->avnd_output_idx_to_model_ports(NField);
64 SCORE_ASSERT(!ports.empty());
65 auto outlet = safe_cast<Process::ControlOutlet*>(ports[0]);
66 outlet->setValue(oscr::to_ossia_value(field, get<N>(arr)));
69 template <avnd::dynamic_ports_port Field, std::
size_t N, std::
size_t NField>
70 void operator()(Field& field, avnd::predicate_index<N>, avnd::field_index<NField>)
85 using ExecNode = safe_node<Node>;
87 std::weak_ptr<ExecNode> weak_node;
88 QPointer<Model> element;
90 void handle_controls(ExecNode& node)
const noexcept
92 using namespace ossia::safe_nodes;
96 typename ExecNode::control_input_values_type arr;
98 while(node.control.ins_queue.try_dequeue(arr))
104 for(
auto state : node.impl.full_state())
106 avnd::control_input_introspection<Node>::for_all_n2(
112 void handle_control_outs(ExecNode& node)
const noexcept
114 using namespace ossia::safe_nodes;
117 typename ExecNode::control_output_values_type arr;
119 while(node.control.outs_queue.try_dequeue(arr))
126 avnd::control_output_introspection<Node>::for_all_n2(
127 avnd::get_outputs<Node>(node.impl),
132 void operator()()
const noexcept
134 if(
auto node = weak_node.lock())
136 static constexpr const auto control_count
137 = avnd::control_input_introspection<Node>::size;
138 static constexpr const auto control_out_count
139 = avnd::control_output_introspection<Node>::size;
140 if constexpr(control_count > 0)
141 handle_controls(*node);
143 if constexpr(control_out_count > 0)
144 handle_control_outs(*node);