void SubgraphNode::removeVariadicInput(InputPtr input) { OutputPtr relay = external_to_internal_outputs_[input->getUUID()]; forwarding_connector_removed(relay); VariadicInputs::removeVariadicInput(input); relay_to_external_input_.erase(relay->getUUID()); external_to_internal_outputs_.erase(input->getUUID()); transition_relay_out_->removeOutput(relay); }
void SubgraphNode::removeVariadicOutput(OutputPtr output) { InputPtr relay = external_to_internal_inputs_[output->getUUID()]; forwarding_connector_removed(relay); relay->message_set.disconnectAll(); VariadicOutputs::removeVariadicOutput(output); relay_to_external_output_.erase(relay->getUUID()); external_to_internal_inputs_.erase(output->getUUID()); transition_relay_in_->removeInput(relay); }
void SubgraphNode::setIterationEnabled(const UUID& external_input_uuid, bool enabled) { if (enabled) { // only one iteration is allowed for now apex_assert_eq(0, iterated_inputs_.size()); iterated_inputs_.insert(external_input_uuid); InputPtr i = node_handle_->getInput(external_input_uuid); OutputPtr o = external_to_internal_outputs_.at(i->getUUID()); // change the output type of the subgraph TokenDataConstPtr vector_type = i->getType(); if (vector_type->isContainer()) { o->setType(vector_type->nestedType()); } // change the input type of the subgraph for (const UUID& id : transition_relay_in_->getInputs()) { InputPtr i = transition_relay_in_->getInput(id); TokenDataConstPtr type = i->getType(); original_types_[id] = type; if (auto vector = std::dynamic_pointer_cast<const connection_types::GenericVectorMessage>(type)) { i->setType(vector->nestedType()); } } } else { iterated_inputs_.erase(external_input_uuid); // change back the input type of the subgraph for (const UUID& id : transition_relay_in_->getInputs()) { InputPtr i = transition_relay_in_->getInput(id); i->setType(original_types_[id]); } } }