Skip to content
Snippets Groups Projects
Commit 936d7c0d authored by Martin Christoph Hierholzer's avatar Martin Christoph Hierholzer
Browse files

Fixed wrongly created hierarchies when directly connecting a device to the...

Fixed wrongly created hierarchies when directly connecting a device to the controlsystem using connectTo(). Now proper virtual submodules are created for each hierarchy level, insted of keeping the slash in the variable name.
parent cff5e0a9
No related branches found
No related tags found
No related merge requests found
...@@ -44,6 +44,13 @@ namespace ChimeraTK { ...@@ -44,6 +44,13 @@ namespace ChimeraTK {
/** Add a virtual sub-module. The module instance will be added to an internal list. */ /** Add a virtual sub-module. The module instance will be added to an internal list. */
void addSubModule(VirtualModule module); void addSubModule(VirtualModule module);
/** Return the submodule with the given name. If it doesn't exist, create it first. */
VirtualModule& createAndGetSubmodule(const std::string& moduleName);
/** Like createAndGetSubmodule(), but recursively create a hierarchy of submodules separated by "/" in the
* moduleName. */
VirtualModule& createAndGetSubmoduleRecursive(const std::string& moduleName);
ModuleType getModuleType() const override { return _moduleType; } ModuleType getModuleType() const override { return _moduleType; }
const Module& virtualise() const override; const Module& virtualise() const override;
......
...@@ -131,9 +131,12 @@ namespace ChimeraTK { ...@@ -131,9 +131,12 @@ namespace ChimeraTK {
} }
auto name = std::string(reg.getRegisterName()).substr(prefixLength); auto name = std::string(reg.getRegisterName()).substr(prefixLength);
VariableNetworkNode node(name, deviceAliasOrURI, reg.getRegisterName(), updateMode, auto lastSlash = name.find_last_of("/");
auto dirname = name.substr(0,lastSlash);
auto basename = name.substr(lastSlash+1);
VariableNetworkNode node(basename, deviceAliasOrURI, reg.getRegisterName(), updateMode,
direction, *valTyp, reg.getNumberOfElements()); direction, *valTyp, reg.getNumberOfElements());
virtualisedModuleFromCatalog.getAccessorList().push_back(node); virtualisedModuleFromCatalog.createAndGetSubmoduleRecursive(dirname).getAccessorList().push_back(node);
} }
......
...@@ -107,5 +107,34 @@ namespace ChimeraTK { ...@@ -107,5 +107,34 @@ namespace ChimeraTK {
return *this; return *this;
} }
/*********************************************************************************************************************/
VirtualModule& VirtualModule::createAndGetSubmodule(const std::string& moduleName) {
for(auto &sm : submodules) {
if(sm.getName() == moduleName) return sm;
}
addSubModule(VirtualModule(moduleName, getDescription(), getModuleType()));
return submodules.back();
}
/*********************************************************************************************************************/
VirtualModule& VirtualModule::createAndGetSubmoduleRecursive(const std::string& moduleName) {
auto slash = moduleName.find_first_of("/");
if(slash == std::string::npos) {
return createAndGetSubmodule(moduleName);
}
else {
auto firstSubmodule = moduleName.substr(0,slash);
auto remainingSubmodules = moduleName.substr(slash+1);
auto &sm = createAndGetSubmodule(firstSubmodule);
sm.createAndGetSubmoduleRecursive(remainingSubmodules);
return sm;
}
}
/*********************************************************************************************************************/
} /* namespace ChimeraTK */ } /* namespace ChimeraTK */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment