A class encapsulating an output stream. More...
#include "output-stream-wrapper.h"
Public Member Functions | |
OutputStreamWrapper (std::ostream *os) | |
Constructor. More... | |
OutputStreamWrapper (std::string filename, std::ios::openmode filemode) | |
Constructor. More... | |
~OutputStreamWrapper () | |
std::ostream * | GetStream (void) |
Return a pointer to an ostream previously set in the wrapper. More... | |
Public Member Functions inherited from ns3::SimpleRefCount< OutputStreamWrapper > | |
SimpleRefCount () | |
Default constructor. More... | |
SimpleRefCount (const SimpleRefCount &o[[maybe_unused]]) | |
Copy constructor. More... | |
uint32_t | GetReferenceCount (void) const |
Get the reference count of the object. More... | |
SimpleRefCount & | operator= ([[maybe_unused]] const SimpleRefCount &o) |
Assignment operator. More... | |
void | Ref (void) const |
Increment the reference count. More... | |
void | Unref (void) const |
Decrement the reference count. More... | |
Private Attributes | |
bool | m_destroyable |
Can be destroyed. More... | |
std::ostream * | m_ostream |
The output stream. More... | |
A class encapsulating an output stream.
This class wraps a pointer to a C++ std::ostream and provides reference counting of the object. This class is recommended for users who want to pass output streams in the ns-3 APIs, such as in callbacks or tracing.
This class is motivated by the fact that in C++, copy and assignment of iostreams is forbidden by std::basic_ios<>, because it is not possible to predict the semantics of the stream desired by a user.
When writing traced information to a file, the tempting ns-3 idiom is to create a bound callback with an ofstream as the bound object. Unfortunately, this implies a copy construction in order to get the ofstream object into the callback. This operation, as mentioned above, is forbidden by the STL. Using this class in ns-3 APIs is generally preferable to passing global pointers to ostream objects, or passing a pointer to a stack allocated ostream (which creates object lifetime issues).
One could imagine having this object inherit from stream to get the various overloaded operator<< defined, but we're going to be using a Ptr<OutputStreamWrapper> when passing this object around. In this case, the Ptr<> wouldn't understand the operators and we would have to dereference it to access the underlying object methods. Since we would have to dereference the Ptr<>, we don't bother and just expect the user to Get a saved pointer to an ostream and dereference it him or herself. As in:
* void * TraceSink (Ptr<OutputStreamWrapper> streamWrapper, Ptr<const Packet> packet) * { * std::ostream *stream = streamWrapper->GetStream (); * *stream << "got packet" << std::endl; * } *
This class uses a basic ns-3 reference counting base class but is not an ns3::Object with attributes, TypeId, or aggregation.
Definition at line 70 of file output-stream-wrapper.h.
ns3::OutputStreamWrapper::OutputStreamWrapper | ( | std::string | filename, |
std::ios::openmode | filemode | ||
) |
Constructor.
filename | file name |
filemode | std::ios::openmode flags |
Definition at line 29 of file output-stream-wrapper.cc.
References m_ostream, NS_ABORT_MSG_UNLESS, NS_LOG_FUNCTION, and ns3::FatalImpl::RegisterStream().
ns3::OutputStreamWrapper::OutputStreamWrapper | ( | std::ostream * | os | ) |
Constructor.
os | output stream |
Definition at line 41 of file output-stream-wrapper.cc.
References m_ostream, NS_ABORT_MSG_UNLESS, NS_LOG_FUNCTION, and ns3::FatalImpl::RegisterStream().
ns3::OutputStreamWrapper::~OutputStreamWrapper | ( | ) |
Definition at line 49 of file output-stream-wrapper.cc.
References m_destroyable, m_ostream, NS_LOG_FUNCTION, and ns3::FatalImpl::UnregisterStream().
std::ostream * ns3::OutputStreamWrapper::GetStream | ( | void | ) |
Return a pointer to an ostream previously set in the wrapper.
Definition at line 58 of file output-stream-wrapper.cc.
References m_ostream, and NS_LOG_FUNCTION.
Referenced by ns3::AsciiLrWpanMacTransmitSinkWithContext(), ns3::AsciiLrWpanMacTransmitSinkWithoutContext(), ns3::AsciiPhyReceiveSinkWithContext(), ns3::AsciiPhyReceiveSinkWithoutContext(), ns3::AsciiPhyTransmitSinkWithContext(), ns3::AsciiPhyTransmitSinkWithoutContext(), ns3::WimaxHelper::AsciiRxEvent(), ns3::WimaxHelper::AsciiTxEvent(), BytesInQueueTrace(), ns3::MobilityHelper::CourseChanged(), CwndChange(), CwndTrace(), CwndTracer(), Ns3TcpLossTestCase::CwndTracer(), ns3::AsciiTraceHelper::DefaultDequeueSinkWithContext(), ns3::AsciiTraceHelper::DefaultDequeueSinkWithoutContext(), ns3::AsciiTraceHelper::DefaultDropSinkWithContext(), ns3::AsciiTraceHelper::DefaultDropSinkWithoutContext(), ns3::AsciiTraceHelper::DefaultEnqueueSinkWithContext(), ns3::AsciiTraceHelper::DefaultEnqueueSinkWithoutContext(), ns3::AsciiTraceHelper::DefaultReceiveSinkWithContext(), ns3::AsciiTraceHelper::DefaultReceiveSinkWithoutContext(), Ns3TcpLossTestCase::DoRun(), Ns3TcpStateTestCase::DoRun(), DropAtQueue(), DroppingStateTracer(), EveryDropTracer(), GoodputSampling(), ns3::V4TraceRoute::HandleWaitReplyTimeout(), InFlightTracer(), ns3::Ipv4L3ProtocolDropSinkWithContext(), ns3::Ipv4L3ProtocolDropSinkWithoutContext(), ns3::Ipv4L3ProtocolRxSinkWithContext(), ns3::Ipv4L3ProtocolRxSinkWithoutContext(), ns3::Ipv4L3ProtocolTxSinkWithContext(), ns3::Ipv4L3ProtocolTxSinkWithoutContext(), ns3::Ipv6L3ProtocolDropSinkWithContext(), ns3::Ipv6L3ProtocolDropSinkWithoutContext(), ns3::Ipv6L3ProtocolRxSinkWithContext(), ns3::Ipv6L3ProtocolRxSinkWithoutContext(), ns3::Ipv6L3ProtocolTxSinkWithContext(), ns3::Ipv6L3ProtocolTxSinkWithoutContext(), LimitsTrace(), NextRxTracer(), NextTxTracer(), ns3::QKDApplicationEntry::Print(), ns3::QKDKeyAssociationLinkEntry::Print(), ns3::aodv::RoutingTableEntry::Print(), ns3::aodv::RoutingTable::Print(), ns3::dsdv::RoutingTableEntry::Print(), ns3::dsdv::RoutingTable::Print(), ns3::Ipv4RoutingHelper::PrintArpCache(), ns3::ArpCache::PrintArpCache(), ns3::Ipv4RoutingHelper::PrintArpCacheEvery(), ns3::Ipv6RoutingHelper::PrintNdiscCache(), ns3::NdiscCache::PrintNdiscCache(), ns3::Ipv6RoutingHelper::PrintNdiscCacheEvery(), ns3::NixVectorRouting< T >::PrintRoutingPath(), ns3::aodv::RoutingProtocol::PrintRoutingTable(), ns3::dsdv::RoutingProtocol::PrintRoutingTable(), ns3::Ipv4GlobalRouting::PrintRoutingTable(), ns3::Ipv4ListRouting::PrintRoutingTable(), ns3::Ipv4StaticRouting::PrintRoutingTable(), ns3::Ipv6ListRouting::PrintRoutingTable(), ns3::Ipv6StaticRouting::PrintRoutingTable(), ns3::Rip::PrintRoutingTable(), ns3::RipNg::PrintRoutingTable(), ns3::NixVectorRouting< T >::PrintRoutingTable(), ns3::olsr::RoutingProtocol::PrintRoutingTable(), ns3::V4TraceRouteHelper::PrintTraceRouteAt(), QueueLengthTracer(), ns3::V4TraceRoute::Receive(), RtoTracer(), RttTracer(), SojournTracer(), SsThreshTracer(), ns3::V4TraceRoute::StartApplication(), TcPacketsInQueue(), and ns3::WriteAveragePowerSpectralDensityReport().
|
private |
Can be destroyed.
Definition at line 97 of file output-stream-wrapper.h.
Referenced by ~OutputStreamWrapper().
|
private |
The output stream.
Definition at line 96 of file output-stream-wrapper.h.
Referenced by OutputStreamWrapper(), ~OutputStreamWrapper(), and GetStream().