INET Framework for OMNeT++/OMNEST
inet::visualizer::StatisticVisualizerBase Class Referenceabstract

#include <StatisticVisualizerBase.h>

Inheritance diagram for inet::visualizer::StatisticVisualizerBase:
inet::visualizer::VisualizerBase inet::visualizer::StatisticCanvasVisualizer inet::visualizer::StatisticOsgVisualizer

Classes

class  DirectiveResolver
 
class  LastValueRecorder
 
class  StatisticVisualization
 

Parameters

bool displayStatistics = false
 
ModuleFilter sourceFilter
 
const char * signalName = nullptr
 
const char * statisticName = nullptr
 
const char * statisticUnit = nullptr
 
const char * statisticExpression = nullptr
 
StringFormat format
 
std::vector< std::string > units
 
cFigure::Font font
 
cFigure::Color textColor
 
cFigure::Color backgroundColor
 
double opacity = NaN
 
Placement placementHint
 
double placementPriority
 
std::map< std::pair< int, simsignal_t >, const StatisticVisualization * > statisticVisualizations
 
virtual void initialize (int stage) override
 
virtual void handleParameterChange (const char *name) override
 
virtual void preDelete (cComponent *root) override
 
virtual void subscribe ()
 
virtual void unsubscribe ()
 
virtual void addResultRecorder (cComponent *source, simsignal_t signal)
 
virtual LastValueRecordergetResultRecorder (cComponent *source, simsignal_t signal)
 
virtual LastValueRecorderfindResultRecorder (cResultListener *resultListener)
 
virtual std::string getText (const StatisticVisualization *statisticVisualization)
 
virtual const char * getUnit (cComponent *source)
 
virtual std::string getRecordingMode ()
 
virtual StatisticVisualizationcreateStatisticVisualization (cComponent *source, simsignal_t signal)=0
 
virtual const StatisticVisualizationgetStatisticVisualization (cComponent *source, simsignal_t signal)
 
virtual void addStatisticVisualization (const StatisticVisualization *statisticVisualization)
 
virtual void removeStatisticVisualization (const StatisticVisualization *statisticVisualization)
 
virtual void removeAllStatisticVisualizations ()
 
virtual void refreshStatisticVisualization (const StatisticVisualization *statisticVisualization)
 
virtual void processSignal (cComponent *source, simsignal_t signal, std::function< void(cIListener *)> receiveSignal)
 
virtual void receiveSignal (cComponent *source, simsignal_t signal, bool b, cObject *details) override
 
virtual void receiveSignal (cComponent *source, simsignal_t signal, intval_t l, cObject *details) override
 
virtual void receiveSignal (cComponent *source, simsignal_t signal, uintval_t l, cObject *details) override
 
virtual void receiveSignal (cComponent *source, simsignal_t signal, double d, cObject *details) override
 
virtual void receiveSignal (cComponent *source, simsignal_t signal, const SimTime &t, cObject *details) override
 
virtual void receiveSignal (cComponent *source, simsignal_t signal, const char *s, cObject *details) override
 
virtual void receiveSignal (cComponent *source, simsignal_t signal, cObject *obj, cObject *details) override
 

Additional Inherited Members

- Protected Member Functions inherited from inet::visualizer::VisualizerBase
virtual int numInitStages () const override
 
virtual Coord getPosition (const cModule *networkNode) const
 
virtual Coord getContactPosition (const cModule *networkNode, const Coord &fromPosition, const char *contactMode, double contactSpacing) const
 
virtual Quaternion getOrientation (const cModule *networkNode) const
 
virtual void mapChunks (const Ptr< const Chunk > &chunk, const std::function< void(const Ptr< const Chunk > &, int)> &thunk) const
 
- Protected Attributes inherited from inet::visualizer::VisualizerBase
cModule * visualizationTargetModule = nullptr
 
cModule * visualizationSubjectModule = nullptr
 
const char * tags = nullptr
 

Member Function Documentation

◆ addResultRecorder()

void inet::visualizer::StatisticVisualizerBase::addResultRecorder ( cComponent *  source,
simsignal_t  signal 
)
protectedvirtual
117 {
118  cStatisticBuilder statisticBuilder(getEnvir()->getConfig());
119  cProperty statisticTemplateProperty;
120  auto recordingMode = getRecordingMode();
121  statisticTemplateProperty.addKey("record");
122  statisticTemplateProperty.setValue("record", 0, recordingMode.c_str());
123  statisticBuilder.addResultRecorders(source, signal, statisticName, &statisticTemplateProperty);
124 }

Referenced by processSignal().

◆ addStatisticVisualization()

void inet::visualizer::StatisticVisualizerBase::addStatisticVisualization ( const StatisticVisualization statisticVisualization)
protectedvirtual

Reimplemented in inet::visualizer::StatisticOsgVisualizer, and inet::visualizer::StatisticCanvasVisualizer.

194 {
195  auto key = std::pair<int, simsignal_t>(statisticVisualization->moduleId, statisticVisualization->signal);
196  statisticVisualizations[key] = statisticVisualization;
197 }

Referenced by inet::visualizer::StatisticCanvasVisualizer::addStatisticVisualization(), inet::visualizer::StatisticOsgVisualizer::addStatisticVisualization(), and processSignal().

◆ createStatisticVisualization()

virtual StatisticVisualization* inet::visualizer::StatisticVisualizerBase::createStatisticVisualization ( cComponent *  source,
simsignal_t  signal 
)
protectedpure virtual

◆ findResultRecorder()

StatisticVisualizerBase::LastValueRecorder * inet::visualizer::StatisticVisualizerBase::findResultRecorder ( cResultListener *  resultListener)
protectedvirtual
140 {
141  if (auto resultRecorder = dynamic_cast<StatisticVisualizerBase::LastValueRecorder *>(resultListener)) {
142  if (getRecordingMode() == resultRecorder->getRecordingMode() && !strcmp(statisticName, resultRecorder->getStatisticName()))
143  return resultRecorder;
144  else
145  return nullptr;
146  }
147  else if (auto resultFilter = dynamic_cast<cResultFilter *>(resultListener)) {
148  auto delegates = resultFilter->getDelegates();
149  for (auto delegate : delegates) {
150  auto foundResultFilter = findResultRecorder(delegate);
151  if (foundResultFilter != nullptr)
152  return foundResultFilter;
153  }
154  }
155  return nullptr;
156 }

Referenced by getResultRecorder().

◆ getRecordingMode()

std::string inet::visualizer::StatisticVisualizerBase::getRecordingMode ( )
protectedvirtual
179 {
180  if (*statisticExpression == '\0')
181  return "statisticVisualizerLastValueRecorder";
182  else
183  return std::string("statisticVisualizerLastValueRecorder(") + statisticExpression + std::string(")");
184 }

Referenced by addResultRecorder(), and findResultRecorder().

◆ getResultRecorder()

StatisticVisualizerBase::LastValueRecorder * inet::visualizer::StatisticVisualizerBase::getResultRecorder ( cComponent *  source,
simsignal_t  signal 
)
protectedvirtual
127 {
128  auto listeners = source->getLocalSignalListeners(signal);
129  for (auto listener : listeners) {
130  if (auto resultListener = dynamic_cast<cResultListener *>(listener)) {
131  auto foundResultFilter = findResultRecorder(resultListener);
132  if (foundResultFilter != nullptr)
133  return foundResultFilter;
134  }
135  }
136  throw cRuntimeError("Recorder not found for signal '%s'", signalName);
137 }

Referenced by processSignal().

◆ getStatisticVisualization()

const StatisticVisualizerBase::StatisticVisualization * inet::visualizer::StatisticVisualizerBase::getStatisticVisualization ( cComponent *  source,
simsignal_t  signal 
)
protectedvirtual
187 {
188  auto key = std::pair<int, simsignal_t>(source->getId(), signal);
189  auto it = statisticVisualizations.find(key);
190  return (it == statisticVisualizations.end()) ? nullptr : it->second;
191 }

Referenced by processSignal().

◆ getText()

std::string inet::visualizer::StatisticVisualizerBase::getText ( const StatisticVisualization statisticVisualization)
protectedvirtual
159 {
160  DirectiveResolver directiveResolver(this, statisticVisualization);
161  return format.formatString(&directiveResolver);
162 }

Referenced by inet::visualizer::StatisticCanvasVisualizer::refreshStatisticVisualization(), and inet::visualizer::StatisticOsgVisualizer::refreshStatisticVisualization().

◆ getUnit()

const char * inet::visualizer::StatisticVisualizerBase::getUnit ( cComponent *  source)
protectedvirtual
165 {
166  auto properties = source->getProperties();
167  for (int i = 0; i < properties->getNumProperties(); i++) {
168  auto property = properties->get(i);
169  if (!strcmp(property->getName(), "statistic") && !strcmp(property->getIndex(), statisticName)) {
170  auto unit = property->getValue("unit", 0);
171  if (unit != nullptr)
172  return unit;
173  }
174  }
175  return statisticUnit;
176 }

Referenced by inet::visualizer::StatisticCanvasVisualizer::createStatisticVisualization(), and inet::visualizer::StatisticOsgVisualizer::createStatisticVisualization().

◆ handleParameterChange()

void inet::visualizer::StatisticVisualizerBase::handleParameterChange ( const char *  name)
overrideprotectedvirtual
89 {
90  if (!hasGUI()) return;
91  if (name != nullptr) {
92  if (!strcmp(name, "sourceFilter"))
93  sourceFilter.setPattern(par("sourceFilter"));
94  else if (!strcmp(name, "format"))
95  format.parseFormat(par("format"));
97  }
98 }

◆ initialize()

void inet::visualizer::StatisticVisualizerBase::initialize ( int  stage)
overrideprotectedvirtual

Reimplemented from inet::visualizer::VisualizerBase.

Reimplemented in inet::visualizer::StatisticOsgVisualizer, and inet::visualizer::StatisticCanvasVisualizer.

63 {
65  if (!hasGUI()) return;
66  if (stage == INITSTAGE_LOCAL) {
67  displayStatistics = par("displayStatistics");
68  sourceFilter.setPattern(par("sourceFilter"));
69  signalName = par("signalName");
70  statisticName = par("statisticName");
71  statisticUnit = par("statisticUnit");
72  statisticExpression = par("statisticExpression");
73  format.parseFormat(par("format"));
74  cStringTokenizer tokenizer(par("unit"));
75  while (tokenizer.hasMoreTokens())
76  units.push_back(tokenizer.nextToken());
77  font = cFigure::parseFont(par("font"));
78  textColor = cFigure::Color(par("textColor"));
79  backgroundColor = cFigure::Color(par("backgroundColor"));
80  opacity = par("opacity");
81  placementHint = parsePlacement(par("placementHint"));
82  placementPriority = par("placementPriority");
84  subscribe();
85  }
86 }

Referenced by inet::visualizer::StatisticCanvasVisualizer::initialize(), and inet::visualizer::StatisticOsgVisualizer::initialize().

◆ preDelete()

void inet::visualizer::StatisticVisualizerBase::preDelete ( cComponent *  root)
overrideprotectedvirtual
27 {
28  if (displayStatistics) {
29  unsubscribe();
31  }
32 }

◆ processSignal()

void inet::visualizer::StatisticVisualizerBase::processSignal ( cComponent *  source,
simsignal_t  signal,
std::function< void(cIListener *)>  receiveSignal 
)
protectedvirtual
217 {
218  auto statisticVisualization = getStatisticVisualization(source, signal);
219  if (statisticVisualization != nullptr)
220  refreshStatisticVisualization(statisticVisualization);
221  else {
222  if (sourceFilter.matches(check_and_cast<cModule *>(source))) {
223  auto statisticVisualization = createStatisticVisualization(source, signal);
224  addResultRecorder(source, signal);
225  statisticVisualization->recorder = getResultRecorder(source, signal);
226  auto listeners = source->getLocalSignalListeners(signal);
227  receiveSignal(listeners[listeners.size() - 1]);
228  addStatisticVisualization(statisticVisualization);
229  refreshStatisticVisualization(statisticVisualization);
230  }
231  }
232 }

◆ receiveSignal() [1/7]

virtual void inet::visualizer::StatisticVisualizerBase::receiveSignal ( cComponent *  source,
simsignal_t  signal,
bool  b,
cObject *  details 
)
inlineoverridevirtual
108 { PROCESS_SIGNAL(b); }

Referenced by processSignal().

◆ receiveSignal() [2/7]

virtual void inet::visualizer::StatisticVisualizerBase::receiveSignal ( cComponent *  source,
simsignal_t  signal,
cObject *  obj,
cObject *  details 
)
inlineoverridevirtual
114 { PROCESS_SIGNAL(obj); }

◆ receiveSignal() [3/7]

virtual void inet::visualizer::StatisticVisualizerBase::receiveSignal ( cComponent *  source,
simsignal_t  signal,
const char *  s,
cObject *  details 
)
inlineoverridevirtual
113 { PROCESS_SIGNAL(s); }

◆ receiveSignal() [4/7]

virtual void inet::visualizer::StatisticVisualizerBase::receiveSignal ( cComponent *  source,
simsignal_t  signal,
const SimTime &  t,
cObject *  details 
)
inlineoverridevirtual
112 { PROCESS_SIGNAL(t); }

◆ receiveSignal() [5/7]

virtual void inet::visualizer::StatisticVisualizerBase::receiveSignal ( cComponent *  source,
simsignal_t  signal,
double  d,
cObject *  details 
)
inlineoverridevirtual
111 { PROCESS_SIGNAL(d); }

◆ receiveSignal() [6/7]

virtual void inet::visualizer::StatisticVisualizerBase::receiveSignal ( cComponent *  source,
simsignal_t  signal,
intval_t  l,
cObject *  details 
)
inlineoverridevirtual
109 { PROCESS_SIGNAL(l); }

◆ receiveSignal() [7/7]

virtual void inet::visualizer::StatisticVisualizerBase::receiveSignal ( cComponent *  source,
simsignal_t  signal,
uintval_t  l,
cObject *  details 
)
inlineoverridevirtual
110 { PROCESS_SIGNAL(l); }

◆ refreshStatisticVisualization()

void inet::visualizer::StatisticVisualizerBase::refreshStatisticVisualization ( const StatisticVisualization statisticVisualization)
protectedvirtual

Reimplemented in inet::visualizer::StatisticOsgVisualizer, and inet::visualizer::StatisticCanvasVisualizer.

235 {
236  double value = statisticVisualization->recorder->getLastValue();
237  if (std::isnan(value) || units.empty()) {
238  statisticVisualization->printValue = value;
239  statisticVisualization->printUnit = statisticVisualization->unit == nullptr ? "" : statisticVisualization->unit;
240  }
241  else {
242  for (auto& unit : units) {
243  statisticVisualization->printUnit = unit.c_str();
244  statisticVisualization->printValue = cNEDValue::convertUnit(value, statisticVisualization->unit, statisticVisualization->printUnit);
245  if (statisticVisualization->printValue > 1)
246  break;
247  }
248  }
249 }

Referenced by processSignal(), inet::visualizer::StatisticCanvasVisualizer::refreshStatisticVisualization(), and inet::visualizer::StatisticOsgVisualizer::refreshStatisticVisualization().

◆ removeAllStatisticVisualizations()

void inet::visualizer::StatisticVisualizerBase::removeAllStatisticVisualizations ( )
protectedvirtual
206 {
207  std::vector<const StatisticVisualization *> removedStatisticVisualizations;
208  for (auto it : statisticVisualizations)
209  removedStatisticVisualizations.push_back(it.second);
210  for (auto it : removedStatisticVisualizations) {
212  delete it;
213  }
214 }

Referenced by handleParameterChange(), and preDelete().

◆ removeStatisticVisualization()

void inet::visualizer::StatisticVisualizerBase::removeStatisticVisualization ( const StatisticVisualization statisticVisualization)
protectedvirtual

◆ subscribe()

void inet::visualizer::StatisticVisualizerBase::subscribe ( )
protectedvirtual
101 {
102  if (*signalName != '\0')
103  visualizationSubjectModule->subscribe(registerSignal(signalName), this);
104 }

Referenced by initialize().

◆ unsubscribe()

void inet::visualizer::StatisticVisualizerBase::unsubscribe ( )
protectedvirtual
107 {
108  // NOTE: lookup the module again because it may have been deleted first
109  auto visualizationSubjectModule = findModuleFromPar<cModule>(par("visualizationSubjectModule"), this);
110  if (visualizationSubjectModule != nullptr) {
111  if (*signalName != '\0')
112  visualizationSubjectModule->unsubscribe(registerSignal(signalName), this);
113  }
114 }

Referenced by preDelete().

Member Data Documentation

◆ backgroundColor

cFigure::Color inet::visualizer::StatisticVisualizerBase::backgroundColor
protected

◆ displayStatistics

bool inet::visualizer::StatisticVisualizerBase::displayStatistics = false
protected

Referenced by initialize(), and preDelete().

◆ font

cFigure::Font inet::visualizer::StatisticVisualizerBase::font
protected

◆ format

StringFormat inet::visualizer::StatisticVisualizerBase::format
protected

◆ opacity

double inet::visualizer::StatisticVisualizerBase::opacity = NaN
protected

◆ placementHint

Placement inet::visualizer::StatisticVisualizerBase::placementHint
protected

◆ placementPriority

double inet::visualizer::StatisticVisualizerBase::placementPriority
protected

◆ signalName

const char* inet::visualizer::StatisticVisualizerBase::signalName = nullptr
protected

◆ sourceFilter

ModuleFilter inet::visualizer::StatisticVisualizerBase::sourceFilter
protected

◆ statisticExpression

const char* inet::visualizer::StatisticVisualizerBase::statisticExpression = nullptr
protected

Referenced by getRecordingMode(), and initialize().

◆ statisticName

const char* inet::visualizer::StatisticVisualizerBase::statisticName = nullptr
protected

◆ statisticUnit

const char* inet::visualizer::StatisticVisualizerBase::statisticUnit = nullptr
protected

Referenced by getUnit(), and initialize().

◆ statisticVisualizations

std::map<std::pair<int, simsignal_t>, const StatisticVisualization *> inet::visualizer::StatisticVisualizerBase::statisticVisualizations
protected

◆ textColor

◆ units

std::vector<std::string> inet::visualizer::StatisticVisualizerBase::units
protected

The documentation for this class was generated from the following files:
inet::visualizer::StatisticVisualizerBase::backgroundColor
cFigure::Color backgroundColor
Definition: StatisticVisualizerBase.h:74
inet::visualizer::StatisticVisualizerBase::format
StringFormat format
Definition: StatisticVisualizerBase.h:70
inet::visualizer::StatisticVisualizerBase::opacity
double opacity
Definition: StatisticVisualizerBase.h:75
inet::StringFormat::parseFormat
void parseFormat(const char *format)
Definition: StringFormat.cc:12
inet::visualizer::StatisticVisualizerBase::addResultRecorder
virtual void addResultRecorder(cComponent *source, simsignal_t signal)
Definition: StatisticVisualizerBase.cc:116
inet::visualizer::StatisticVisualizerBase::displayStatistics
bool displayStatistics
Definition: StatisticVisualizerBase.h:64
inet::visualizer::StatisticVisualizerBase::font
cFigure::Font font
Definition: StatisticVisualizerBase.h:72
inet::visualizer::parsePlacement
Placement parsePlacement(const char *s)
Definition: Placement.cc:14
inet::visualizer::StatisticVisualizerBase::placementPriority
double placementPriority
Definition: StatisticVisualizerBase.h:77
inet::visualizer::StatisticVisualizerBase::statisticExpression
const char * statisticExpression
Definition: StatisticVisualizerBase.h:69
inet::visualizer::StatisticVisualizerBase::removeStatisticVisualization
virtual void removeStatisticVisualization(const StatisticVisualization *statisticVisualization)
Definition: StatisticVisualizerBase.cc:199
inet::visualizer::StatisticVisualizerBase::statisticName
const char * statisticName
Definition: StatisticVisualizerBase.h:67
inet::visualizer::StatisticVisualizerBase::textColor
cFigure::Color textColor
Definition: StatisticVisualizerBase.h:73
inet::units::values::s
value< double, units::s > s
Definition: Units.h:1235
inet::visualizer::StatisticVisualizerBase::receiveSignal
virtual void receiveSignal(cComponent *source, simsignal_t signal, bool b, cObject *details) override
Definition: StatisticVisualizerBase.h:108
inet::INITSTAGE_LOCAL
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
inet::visualizer::StatisticVisualizerBase::createStatisticVisualization
virtual StatisticVisualization * createStatisticVisualization(cComponent *source, simsignal_t signal)=0
inet::units::values::b
value< int64_t, units::b > b
Definition: Units.h:1241
inet::units::unit
pow< internal::none, 0 > unit
Definition: Units.h:72
inet::visualizer::ModuleFilter::matches
bool matches(const cModule *module) const
Definition: ModuleFilter.cc:19
inet::visualizer::StatisticVisualizerBase::getStatisticVisualization
virtual const StatisticVisualization * getStatisticVisualization(cComponent *source, simsignal_t signal)
Definition: StatisticVisualizerBase.cc:186
inet::StringFormat::formatString
const char * formatString(IDirectiveResolver *resolver) const
Definition: StringFormat.cc:17
inet::visualizer::StatisticVisualizerBase::getRecordingMode
virtual std::string getRecordingMode()
Definition: StatisticVisualizerBase.cc:178
inet::visualizer::StatisticVisualizerBase::sourceFilter
ModuleFilter sourceFilter
Definition: StatisticVisualizerBase.h:65
inet::visualizer::StatisticVisualizerBase::subscribe
virtual void subscribe()
Definition: StatisticVisualizerBase.cc:100
inet::visualizer::StatisticVisualizerBase::refreshStatisticVisualization
virtual void refreshStatisticVisualization(const StatisticVisualization *statisticVisualization)
Definition: StatisticVisualizerBase.cc:234
inet::DiffservUtil::Color
Color
Definition: DiffservUtil.h:17
inet::visualizer::VisualizerBase::visualizationSubjectModule
cModule * visualizationSubjectModule
Definition: VisualizerBase.h:26
inet::visualizer::StatisticVisualizerBase::getResultRecorder
virtual LastValueRecorder * getResultRecorder(cComponent *source, simsignal_t signal)
Definition: StatisticVisualizerBase.cc:126
inet::visualizer::StatisticVisualizerBase::statisticVisualizations
std::map< std::pair< int, simsignal_t >, const StatisticVisualization * > statisticVisualizations
Definition: StatisticVisualizerBase.h:80
PROCESS_SIGNAL
#define PROCESS_SIGNAL(value)
Definition: StatisticVisualizerBase.h:107
inet::visualizer::StatisticVisualizerBase::unsubscribe
virtual void unsubscribe()
Definition: StatisticVisualizerBase.cc:106
inet::visualizer::StatisticVisualizerBase::findResultRecorder
virtual LastValueRecorder * findResultRecorder(cResultListener *resultListener)
Definition: StatisticVisualizerBase.cc:139
inet::visualizer::ModuleFilter::setPattern
void setPattern(const char *pattern)
Definition: ModuleFilter.cc:14
inet::visualizer::StatisticVisualizerBase::addStatisticVisualization
virtual void addStatisticVisualization(const StatisticVisualization *statisticVisualization)
Definition: StatisticVisualizerBase.cc:193
inet::visualizer::StatisticVisualizerBase::placementHint
Placement placementHint
Definition: StatisticVisualizerBase.h:76
inet::visualizer::StatisticVisualizerBase::units
std::vector< std::string > units
Definition: StatisticVisualizerBase.h:71
inet::visualizer::StatisticVisualizerBase::signalName
const char * signalName
Definition: StatisticVisualizerBase.h:66
inet::visualizer::VisualizerBase::initialize
virtual void initialize(int stage) override
Definition: VisualizerBase.cc:23
inet::visualizer::StatisticVisualizerBase::statisticUnit
const char * statisticUnit
Definition: StatisticVisualizerBase.h:68
inet::visualizer::StatisticVisualizerBase::removeAllStatisticVisualizations
virtual void removeAllStatisticVisualizations()
Definition: StatisticVisualizerBase.cc:205