-
Martin Christoph Hierholzer authoredMartin Christoph Hierholzer authored
ControlSystemModule.cc 2.49 KiB
/*
* ControlSystemModule.cc
*
* Created on: Jun 28, 2016
* Author: Martin Hierholzer
*/
#include "ControlSystemModule.h"
#include "Application.h"
namespace ChimeraTK {
ControlSystemModule::ControlSystemModule(const std::string &_variableNamePrefix)
: Module(nullptr,
_variableNamePrefix.empty()
? "<ControlSystem>"
: _variableNamePrefix.substr(
_variableNamePrefix.find_last_of("/") + 1),
""),
variableNamePrefix(_variableNamePrefix) {}
/*********************************************************************************************************************/
VariableNetworkNode ControlSystemModule::
operator()(const std::string &variableName, const std::type_info &valueType,
size_t nElements) const {
assert(variableName.find_first_of("/") == std::string::npos);
if (variables.count(variableName) == 0) {
variables[variableName] = {variableNamePrefix / variableName,
{VariableDirection::invalid, false},
valueType,
nElements};
}
return variables[variableName];
}
/*********************************************************************************************************************/
Module &ControlSystemModule::operator[](const std::string &moduleName) const {
assert(moduleName.find_first_of("/") == std::string::npos);
if (subModules.count(moduleName) == 0) {
subModules[moduleName] = {variableNamePrefix / moduleName};
}
return subModules[moduleName];
}
/*********************************************************************************************************************/
const Module &ControlSystemModule::virtualise() const { return *this; }
/*********************************************************************************************************************/
std::list<VariableNetworkNode> ControlSystemModule::getAccessorList() const {
std::list<VariableNetworkNode> list;
for (auto &v : variables)
list.push_back(v.second);
return list;
}
/*********************************************************************************************************************/
std::list<Module *> ControlSystemModule::getSubmoduleList() const {
std::list<Module *> list;
for (auto &m : subModules)
list.push_back(&m.second);
return list;
}
/*********************************************************************************************************************/
} // namespace ChimeraTK