diff --git a/src/graph/GraphView.cpp b/src/graph/GraphView.cpp index 72a499d18907610f07d193f4fb31707a7e01946f..98644c5bd36e2d47572d73a81bf7c80bc378a17e 100644 --- a/src/graph/GraphView.cpp +++ b/src/graph/GraphView.cpp @@ -531,68 +531,7 @@ void Aidge::GraphView::insertParent(NodePtr childNode, bool Aidge::GraphView::replaceWith(std::set<std::shared_ptr<Node>> newNodes) { - // TODO : only supports one input/output node for now - assert(mNodes.size()>0 && "There must be at least one Node to replace"); - - bool replacable; - std::shared_ptr<Node> previousInputNode = (*inputNodes().begin()); - std::shared_ptr<Node> previousOutputNode = (*outputNodes().begin()); - std::shared_ptr<Node> newOutputNode; - - auto gNew = std::make_shared<GraphView>(); - gNew->add(newNodes, false); - - if (newNodes.empty()) { - replacable = (outputNodes().size() == 1) && - (inputNodes().size() == 1) && - ((*outputNodes().begin())->nbOutputs() == 1) && - ((*inputNodes().begin())->nbDataInputs() == 1); - newOutputNode = previousInputNode->input(0).first; - } else { - newOutputNode = (*gNew->outputNodes().begin()); - replacable = (outputNodes().size() == gNew->outputNodes().size()) && - (outputNodes().size() == 1) && - (previousOutputNode->nbOutputs() == newOutputNode->nbOutputs()); - } - - if (replacable) { - auto copyOutputs = previousOutputNode->outputs(); - - // manage Views for newNodes - // only keep common views to each node for the new set - std::set<std::shared_ptr<GraphView>> commonGraphViews = (*mNodes.begin())->views(); - for (const auto& nodePtr : mNodes) { - const auto nodeView = nodePtr->views(); - std::set<std::shared_ptr<GraphView>> intersection; - std::set_intersection(commonGraphViews.begin(), commonGraphViews.end(), - nodeView.begin(), nodeView.end(), - std::inserter(intersection, intersection.begin())); - commonGraphViews = intersection; - } - - // clean Nodes to replace - std::set<std::shared_ptr<Node>> copyNode = mNodes; - for (auto& nodePtr : copyNode) { nodePtr->resetConnections(true); } - - // copy output connections - if (newOutputNode) { - for (IOIndex_t o = 0; o < previousOutputNode->nbOutputs(); ++o) { - auto outputPairs = copyOutputs[o]; - for (const auto& onePair : outputPairs) { - newOutputNode->addChild(onePair.first, o, onePair.second); - } - } - } - // insert new Nodes in the right GraphViews - for (auto& graphPtr : commonGraphViews) { - graphPtr->add(newNodes, false); - if (newNodes.empty()) { - graphPtr->updateInputNodes(); - graphPtr->updateOutputNodes(); - } - } - } - return replacable; + return GraphView::replace(mNodes, newNodes); } bool Aidge::GraphView::replace(const std::set<Aidge::NodePtr>& oldNodes, const std::set<Aidge::NodePtr>& newNodes) {