From 676ebaa140f3ac4dc763806b3c8de7d6790ccebe Mon Sep 17 00:00:00 2001
From: cmoineau <cyril.moineau@cea.fr>
Date: Fri, 20 Sep 2024 11:12:24 +0000
Subject: [PATCH] Fix attribute parsing findBestMatch + add log if
 matchingSpecs is empty.

---
 src/backend/OperatorImpl.cpp | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/backend/OperatorImpl.cpp b/src/backend/OperatorImpl.cpp
index 0fa2cfdad..876d3b2e9 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>();
 }
-- 
GitLab