22 #include "ns3/abort.h"
23 #include "ns3/config.h"
24 #include "ns3/get-wildcard-matches.h"
37 : m_aggregator(nullptr),
40 m_outputFileNameWithoutExtension(
"file-helper"),
41 m_hasHeadingBeenSet(false)
51 : m_aggregator(nullptr),
54 m_outputFileNameWithoutExtension(outputFileNameWithoutExtension),
55 m_hasHeadingBeenSet(false)
78 <<
m_aggregator <<
" may be destroyed if no references remain.");
92 const std::string& path,
93 const std::string& probeTraceSource)
97 std::string pathWithoutLastToken;
98 std::string lastToken;
101 bool pathHasNoWildcards = path.find(
'*') == std::string::npos;
104 size_t lastSlash = path.find_last_of(
'/');
105 if (lastSlash == std::string::npos)
107 pathWithoutLastToken = path;
113 pathWithoutLastToken = path.substr(0, lastSlash);
116 lastToken = path.substr(lastSlash + 1, std::string::npos);
122 uint32_t matchCount = matches.
GetN();
125 std::string matchIdentifier;
128 bool onlyOneAggregator;
131 if (matchCount == 1 && pathHasNoWildcards)
136 matchIdentifier =
"0";
137 onlyOneAggregator =
true;
145 else if (matchCount > 0)
148 for (uint32_t i = 0; i < matchCount; i++)
151 std::ostringstream matchIdentifierStream;
152 matchIdentifierStream << i;
153 matchIdentifier = matchIdentifierStream.str();
154 onlyOneAggregator =
false;
158 std::string wildcardSeparator =
"-";
160 std::string wildcardMatches =
GetWildcardMatches(path, matchedPath, wildcardSeparator);
180 const std::string& probeName,
181 const std::string& path)
202 probe->SetName(probeName);
205 probe->ConnectByPath(path);
211 m_probeMap[probeName] = std::make_pair(probe, typeId);
222 NS_ABORT_MSG(
"That time series adaptor has already been added");
229 timeSeriesAdaptor->Enable();
237 const std::string& outputFileName,
238 bool onlyOneAggregator)
240 NS_LOG_FUNCTION(
this << aggregatorName << outputFileName << onlyOneAggregator);
245 NS_ABORT_MSG(
"That file aggregator has already been added");
250 if (onlyOneAggregator)
261 CreateObject<FileAggregator>(outputFileName,
m_fileType);
276 multipleAggregator->SetHeading(
m_heading);
279 multipleAggregator->Enable();
291 auto mapIterator =
m_probeMap.find(probeName);
296 return mapIterator->second.first;
340 const std::string& outputFileName)
352 bool onlyOneAggregator =
false;
353 AddAggregator(aggregatorName, outputFileName, onlyOneAggregator);
449 const std::string& matchIdentifier,
450 const std::string& path,
451 const std::string& probeTraceSource,
452 const std::string& outputFileNameWithoutExtension,
453 bool onlyOneAggregator)
455 NS_LOG_FUNCTION(
this << typeId << matchIdentifier << path << probeTraceSource
456 << outputFileNameWithoutExtension << onlyOneAggregator);
462 std::ostringstream probeNameStream;
464 std::string probeName = probeNameStream.str();
467 std::string probeContext = probeName +
"/" + matchIdentifier +
"/" + probeTraceSource;
481 m_probeMap[probeName].first->TraceConnectWithoutContext(
488 m_probeMap[probeName].first->TraceConnectWithoutContext(
495 m_probeMap[probeName].first->TraceConnectWithoutContext(
502 m_probeMap[probeName].first->TraceConnectWithoutContext(
509 m_probeMap[probeName].first->TraceConnectWithoutContext(
516 m_probeMap[probeName].first->TraceConnectWithoutContext(
523 m_probeMap[probeName].first->TraceConnectWithoutContext(
530 m_probeMap[probeName].first->TraceConnectWithoutContext(
537 m_probeMap[probeName].first->TraceConnectWithoutContext(
544 m_probeMap[probeName].first->TraceConnectWithoutContext(
552 <<
"; need to add support in the helper for this");
557 std::string outputFileName = outputFileNameWithoutExtension +
".txt";
558 AddAggregator(probeContext, outputFileName, onlyOneAggregator);
561 std::string adaptorTraceSource =
"Output";
hold a set of objects which match a specific search string.
std::string GetMatchedPath(uint32_t i) const
This aggregator sends values it receives to a file.
void Write2d(std::string context, double v1, double v2)
Writes 2 values to the file.
FileType
The type of file written by the aggregator.
void Set2dFormat(const std::string &format)
Sets the 2D format string for the C-style sprintf() function.
void SetHeading(const std::string &heading)
Sets the heading string that will be printed on the first line of the file.
void Set5dFormat(const std::string &format)
Sets the 5D format string for the C-style sprintf() function.
void AddTimeSeriesAdaptor(const std::string &adaptorName)
Adds a time series adaptor to be used to write the file.
Ptr< FileAggregator > GetAggregatorSingle()
Gets the single aggregator that is always constructed.
std::string m_6dFormat
Format string for 6D format C-style sprintf() function.
std::map< std::string, std::pair< Ptr< Probe >, std::string > > m_probeMap
Maps probe names to probes.
void Set3dFormat(const std::string &format)
Sets the 3D format string for the C-style sprintf() function.
Ptr< Probe > GetProbe(std::string probeName) const
Gets the specified probe.
std::map< std::string, Ptr< TimeSeriesAdaptor > > m_timeSeriesAdaptorMap
Maps time series adaptor names to time series adaptors.
void WriteProbe(const std::string &typeId, const std::string &path, const std::string &probeTraceSource)
std::map< std::string, Ptr< FileAggregator > > m_aggregatorMap
Maps aggregator names to aggregators when multiple aggregators are needed.
FileHelper()
Constructs a file helper that will create a space separated file named "file-helper....
void Set6dFormat(const std::string &format)
Sets the 6D format string for the C-style sprintf() function.
ObjectFactory m_factory
Used to create the probes and collectors as they are added.
uint32_t m_fileProbeCount
Number of file probes that have been created.
std::string m_heading
Heading line for the outputfile.
std::string m_outputFileNameWithoutExtension
The name of the output file to created without its extension.
std::string m_8dFormat
Format string for 8D format C-style sprintf() function.
std::string m_9dFormat
Format string for 9D format C-style sprintf() function.
void ConfigureFile(const std::string &outputFileNameWithoutExtension, FileAggregator::FileType fileType=FileAggregator::SPACE_SEPARATED)
bool m_hasHeadingBeenSet
Indicates if the heading line for the file has been set.
std::string m_2dFormat
Format string for 2D format C-style sprintf() function.
void AddAggregator(const std::string &aggregatorName, const std::string &outputFileName, bool onlyOneAggregator)
Adds an aggregator to be used to write values to files.
void Set1dFormat(const std::string &format)
Sets the 1D format string for the C-style sprintf() function.
void AddProbe(const std::string &typeId, const std::string &probeName, const std::string &path)
Adds a probe to be used to write values to files.
std::string m_1dFormat
Format string for 1D format C-style sprintf() function.
std::string m_10dFormat
Format string for 10D format C-style sprintf() function.
std::string m_4dFormat
Format string for 4D format C-style sprintf() function.
std::string m_7dFormat
Format string for 7D format C-style sprintf() function.
void Set4dFormat(const std::string &format)
Sets the 4D format string for the C-style sprintf() function.
void Set7dFormat(const std::string &format)
Sets the 7D format string for the C-style sprintf() function.
FileAggregator::FileType m_fileType
Determines the kind of file written by the aggregator.
Ptr< FileAggregator > m_aggregator
The single aggregator that is always created in the constructor.
std::string m_5dFormat
Format string for 5D format C-style sprintf() function.
std::string m_3dFormat
Format string for 3D format C-style sprintf() function.
void Set8dFormat(const std::string &format)
Sets the 8D format string for the C-style sprintf() function.
Ptr< FileAggregator > GetAggregatorMultiple(const std::string &aggregatorName, const std::string &outputFileName)
Gets one of the multiple aggregators from the map.
void Set10dFormat(const std::string &format)
Sets the 10D format string for the C-style sprintf() function.
void ConnectProbeToAggregator(const std::string &typeId, const std::string &matchIdentifier, const std::string &path, const std::string &probeTraceSource, const std::string &outputFileNameWithoutExtension, bool onlyOneAggregator)
Connects the probe to the aggregator.
void Set9dFormat(const std::string &format)
Sets the 9D format string for the C-style sprintf() function.
Ptr< Object > Create() const
Create an Object instance of the configured TypeId.
void SetTypeId(TypeId tid)
Set the TypeId of the Objects to be created by this factory.
Ptr< T > GetObject() const
Get a pointer to the requested aggregated Object.
Smart pointer class similar to boost::intrusive_ptr.
void TraceSinkUinteger8(uint8_t oldData, uint8_t newData)
Trace sink for receiving data from uint8_t valued trace sources.
void TraceSinkDouble(double oldData, double newData)
Trace sink for receiving data from double valued trace sources.
void TraceSinkBoolean(bool oldData, bool newData)
Trace sink for receiving data from bool valued trace sources.
void TraceSinkUinteger32(uint32_t oldData, uint32_t newData)
Trace sink for receiving data from uint32_t valued trace sources.
void TraceSinkUinteger16(uint16_t oldData, uint16_t newData)
Trace sink for receiving data from uint16_t valued trace sources.
MatchContainer LookupMatches(std::string path)
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
#define NS_ABORT_MSG(msg)
Unconditional abnormal program termination with a message.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Callback< R, Args... > MakeCallback(R(T::*memPtr)(Args...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
std::string GetWildcardMatches(const std::string &configPath, const std::string &matchedPath, const std::string &wildcardSeparator)
Returns the text matches from the matched path for each of the wildcards in the Config path,...