14 class InvalidityTracerVisitor :
public Visitor<VariableNetworkNode, ApplicationModule> {
19 void dispatch(
const ApplicationModule& module)
override;
23 void dispatch(
const VariableNetworkNode& node)
override;
31 void InvalidityTracerVisitor::dispatch(
const ApplicationModule& module) {
32 auto validity =
module.getDataValidity();
34 if(validity == DataValidity::faulty) {
35 _myLog <<
"Module " <<
module.getQualifiedName()
36 << " has DataValidity::faulty (count: " << module.getDataFaultCounter() << ")";
38 auto hash =
module.getCircularNetworkHash();
40 _myLog <<
" (in circular network " << hash <<
" with invalidity count "
45 for(
auto& accessor :
module.getAccessorListRecursive()) {
53 void InvalidityTracerVisitor::dispatch(
const VariableNetworkNode& node) {
66 auto accessor = boost::dynamic_pointer_cast<MetaDataPropagationFlagProvider>(
67 node.getAppAccessorNoType().getHighLevelImplElement());
69 _myLog <<
"InvalidityTracerVisitor: The following application node does not derive from "
70 "MetaDataPropagationFlagProvider:\n";
76 if(accessor->getLastValidity() == DataValidity::faulty) {
77 _myLog <<
" -> Input " << node.getQualifiedName() <<
" has DataValidity::faulty\n";
94 InvalidityTracerVisitor visitor(myLog);
95 myLog <<
"==== BEGIN InvalidityTracer trace output ============================================\n";
103 visitor.dispatch(*appModule);
107 myLog <<
"==== END InvalidityTracer trace output ==============================================";
size_t getCircularNetworkInvalidityCounter(size_t circularNetworkHash) const
static Application & getInstance()
Obtain instance of the application.
Logger::StreamProxy logger(Logger::Severity severity)
Convenicene function to obtain a logger stream with the given Severity.
std::list< Module * > getSubmoduleListRecursive() const
Obtain the list of submodules associated with this instance and any submodules.
Proxy for output stream, handed out to the log sources by the Logger::Module.
InvalidityTracer application module.
void mainLoop() override
To be implemented by the user: function called in a separate thread executing the main loop of the mo...
ScalarPushInput< int > printTrace