diff --git a/include/aidge/graph/Node.hpp b/include/aidge/graph/Node.hpp index c6ac9c651aadbc8b074bc55aa955838ac370746b..9841555e88b63cef9c7f8fe7554ed42cfe5b87ed 100644 --- a/include/aidge/graph/Node.hpp +++ b/include/aidge/graph/Node.hpp @@ -252,10 +252,10 @@ public: if ((inputCategory(i) == InputCategory::Data || inputCategory(i) == InputCategory::OptionalData) && input(i).second == gk_IODefaultIndex) { - break; + return i; } } - return (i < nbInputs()) ? i : gk_IODefaultIndex; + return gk_IODefaultIndex; } diff --git a/src/graph/Node.cpp b/src/graph/Node.cpp index 33c336a843bcf168497cd86fea241d4ad2dec362..37bc77b70dbb544f8185a145451b5a870feab05a 100644 --- a/src/graph/Node.cpp +++ b/src/graph/Node.cpp @@ -147,7 +147,9 @@ bool Aidge::Node::valid() const { Aidge::IOIndex_t Aidge::Node::getNbFreeDataInputs() const { IOIndex_t nbFreeDataIn = 0; for (IOIndex_t i = 0; i < nbInputs(); ++i) { - if (input(i).second == gk_IODefaultIndex) { + if ((inputCategory(i) == InputCategory::Data + || inputCategory(i) == InputCategory::OptionalData) + && input(i).second == gk_IODefaultIndex) { ++nbFreeDataIn; } } @@ -387,10 +389,17 @@ void Aidge::Node::addChild(const std::shared_ptr<Node>& otherNode, const IOIndex void Aidge::Node::addChild(std::shared_ptr<GraphView> otherView, const IOIndex_t outId, std::pair<std::shared_ptr<Node>, IOIndex_t> otherInId) { if (!otherInId.first) { - AIDGE_ASSERT(otherView->inputNodes().size() == 1U, + AIDGE_ASSERT(otherView->getNbFreeDataInputs() == 1U, "Input node of GraphView {} need to be specified, because it has more than one input ({} inputs), when trying to add it as a child of node {} (of type {})", otherView->name(), otherView->inputNodes().size(), name(), type()); - otherInId.first = *(otherView->inputNodes().begin()); + + otherInId.first = *(std::find_if( + otherView->inputNodes().begin(), + otherView->inputNodes().end(), + [](const auto &node) { + return node->getFirstFreeDataInput() != gk_IODefaultIndex; + } + )); } otherInId.second = (otherInId.second != gk_IODefaultIndex) ? otherInId.second