diff --git a/src/backend/OperatorImpl.cpp b/src/backend/OperatorImpl.cpp index 0fa2cfdadb3af350a5668444c0a330e023818a41..876d3b2e92bcd7b581314e50becdd5c114083d73 100644 --- a/src/backend/OperatorImpl.cpp +++ b/src/backend/OperatorImpl.cpp @@ -120,11 +120,10 @@ Aidge::ImplSpec Aidge::OperatorImpl::getBestMatch(const ImplSpec& requiredSpecs) std::string qualifier; const auto qualifierPos = std::find_if(attrName.begin(), attrName.end(), [](char c) { return c == ':'; }); - if (qualifierPos != attrName.begin()) { - name = attrName.substr(0, qualifierPos - attrName.begin()); - qualifier = attrName.substr(qualifierPos - attrName.begin()); + if (qualifierPos != attrName.end()) { + name = attrName.substr(0, (qualifierPos - attrName.begin())); + qualifier = attrName.substr((qualifierPos - attrName.begin())+1); } - const bool mandatory = (qualifier == "!"); if (mandatory) { // Required attribute: @@ -161,6 +160,10 @@ Aidge::ImplSpec Aidge::OperatorImpl::getBestMatch(const ImplSpec& requiredSpecs) Log::debug(" {}:{} - {}", (match) ? "MATCH" : "MISMATCH", priority, spec); } + if(matchingSpecs.empty()){ + Log::debug(" No spec to match registered, returning requiredSpecs."); + return requiredSpecs; + } // Return best match const auto bestMatch = std::max_element(matchingSpecs.begin(), matchingSpecs.end()); if (*bestMatch >= 0) { @@ -367,6 +370,6 @@ std::shared_ptr<Aidge::ProdConso> Aidge::OperatorImpl::getProdConso() const { return std::make_shared<ProdConso>(mOp); } -std::set<Aidge::ImplSpec> Aidge::OperatorImpl::getAvailableImplSpecs() const { - return std::set<ImplSpec>(); +std::vector<Aidge::ImplSpec> Aidge::OperatorImpl::getAvailableImplSpecs() const { + return std::vector<ImplSpec>(); }