From 992253643c93a4c1d2196b94949a61f68ee2133d Mon Sep 17 00:00:00 2001 From: Benjamin Halimi <benjamin.halimi@cea.fr> Date: Mon, 16 Sep 2024 08:26:39 +0000 Subject: [PATCH] Enhance createUniqueName --- python_binding/graph/pybind_Node.cpp | 10 ++++++++++ src/graph/Node.cpp | 21 ++++++++++++++++----- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/python_binding/graph/pybind_Node.cpp b/python_binding/graph/pybind_Node.cpp index 1fa552ce1..d8e77bb25 100644 --- a/python_binding/graph/pybind_Node.cpp +++ b/python_binding/graph/pybind_Node.cpp @@ -48,6 +48,16 @@ void init_Node(py::module& m) { :rtype: str )mydelimiter") + .def("create_unique_name", &Node::createUniqueName, py::arg("base_name"), + R"mydelimiter( + Given a base name, generate a new name which is unique in all the GraphViews containing this node. + + :param base_name: proposed name for the node. + :type base_name: str + :rtype: str + )mydelimiter") + + .def("__repr__", &Node::repr) .def("add_child", diff --git a/src/graph/Node.cpp b/src/graph/Node.cpp index 382052535..12080f590 100644 --- a/src/graph/Node.cpp +++ b/src/graph/Node.cpp @@ -73,13 +73,24 @@ void Aidge::Node::setName(const std::string& name) { mName = name; } -std::string Aidge::Node::createUniqueName(std::string name){ - for (auto graphView : views()){ - if (graphView->inView(name)){ - return createUniqueName(name.append("_")); +std::string Aidge::Node::createUniqueName(std::string baseName) +{ + int index = 0; + bool nameAlreadyUsed = true; + std::string newName; + while (nameAlreadyUsed) { + std::string suffix = "_" + std::to_string(index); + newName = (index == 0) ? baseName : baseName + suffix; + nameAlreadyUsed = false; + for (auto graphView : views()) { + if (graphView->inView(newName)) { + nameAlreadyUsed = true; + break; + } } + index++; } - return name; + return newName; } /////////////////////////////////////////////////////// -- GitLab