-
Jens Georg authored
This is to support when running under Boost::Test which will swallow the message otherwise and print the confusing ~AppBase() message of not being properly shut down
Jens Georg authoredThis is to support when running under Boost::Test which will swallow the message otherwise and print the confusing ~AppBase() message of not being properly shut down
ModuleImpl.cc 2.16 KiB
#include "ApplicationCore.h"
namespace ChimeraTK {
/*********************************************************************************************************************/
VariableNetworkNode ModuleImpl::operator()(const std::string& variableName) const {
return virtualise()(variableName);
}
/*********************************************************************************************************************/
Module& ModuleImpl::operator[](const std::string& moduleName) const { return virtualise()[moduleName]; }
/*********************************************************************************************************************/
void ModuleImpl::connectTo(const Module& target, VariableNetworkNode trigger) const {
virtualise().connectTo(target.virtualise(), trigger);
}
/*********************************************************************************************************************/
const Module& ModuleImpl::virtualise() const {
if(!virtualisedModule_isValid) {
virtualisedModule = findTag(".*");
virtualisedModule_isValid = true;
}
return virtualisedModule;
}
/*********************************************************************************************************************/
ConfigReader& ModuleImpl::appConfig() const {
size_t nConfigReaders = 0;
ConfigReader* instance = nullptr;
for(auto* mod : Application::getInstance().getSubmoduleListRecursive()) {
if(!dynamic_cast<ConfigReader*>(mod)) continue;
++nConfigReaders;
instance = dynamic_cast<ConfigReader*>(mod);
}
if(nConfigReaders != 1) {
std::string message = "ApplicationModule::appConfig() called but " + std::to_string(nConfigReaders) +
" instances of ChimeraTK::ConfigReader have been found.";
// Printing the message as well; there is a situation when running under Boost::Test where this
// is caught by Boost and causes a weird destructor message from AppBase.cc instead with no means of
// finding out the actual error
std::cerr << message << std::endl;
throw ChimeraTK::logic_error(message);
}
return *instance;
}
} // namespace ChimeraTK