Newer
Older
// SPDX-FileCopyrightText: Deutsches Elektronen-Synchrotron DESY, MSK, ChimeraTK Project <chimeratk-support@desy.de>
// SPDX-License-Identifier: LGPL-3.0-or-later
/*********************************************************************************************************************/
VariableNetworkDumpingVisitor::VariableNetworkDumpingVisitor(const std::string& prefix, std::ostream& stream)
: Visitor<ChimeraTK::VariableNetwork>(), VariableNetworkNodeDumpingVisitor(stream, " "), _prefix(prefix) {}
/*********************************************************************************************************************/
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
void VariableNetworkDumpingVisitor::dispatch(const VariableNetwork& t) {
stream() << _prefix << "VariableNetwork";
stream() << " {" << std::endl;
stream() << _prefix << " value type = " << boost::core::demangle(t.getValueType().name())
<< ", engineering unit = " << t.getUnit() << std::endl;
stream() << _prefix << " trigger type = ";
try {
auto tt = t.getTriggerType(false);
if(tt == VariableNetwork::TriggerType::feeder) stream() << "feeder";
if(tt == VariableNetwork::TriggerType::pollingConsumer) stream() << "pollingConsumer";
if(tt == VariableNetwork::TriggerType::external) stream() << "external";
if(tt == VariableNetwork::TriggerType::none) stream() << "none";
stream() << std::endl;
}
catch(ChimeraTK::logic_error& e) {
stream() << "**error**" << std::endl;
}
stream() << _prefix << " feeder";
if(t.hasFeedingNode()) {
t.getFeedingNode().accept(*this);
}
else {
stream() << " **error, no feeder found**" << std::endl;
}
stream() << _prefix << " consumers: " << t.countConsumingNodes() << std::endl;
size_t count = 0;
for(auto& consumer : t.getConsumingNodes()) {
if(consumer.getDirection().dir != VariableDirection::consuming) continue;
stream() << _prefix << " # " << ++count << ":";
consumer.accept(*this);
}
if(t.hasFeedingNode()) {
if(t.getFeedingNode().hasExternalTrigger()) {
stream() << _prefix << " external trigger node: ";
t.getFeedingNode().getExternalTrigger().accept(*this);
}
stream() << _prefix << "}" << std::endl;
/*********************************************************************************************************************/