Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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);
}
Exemplo n.º 3
0
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]);
        }
    }
}