add TraceResolver::PrintAvailable method
This commit is contained in:
@@ -62,6 +62,7 @@ public:
|
||||
// inherited from TraceResolver
|
||||
virtual void Connect (std::string path, CallbackBase const &cb, const TraceContext &context);
|
||||
virtual void Disconnect (std::string path, CallbackBase const &cb);
|
||||
virtual void PrintAvailable (std::string path, const TraceContext &context, std::ostream &os);
|
||||
|
||||
private:
|
||||
class IteratorBase
|
||||
@@ -139,7 +140,7 @@ ArrayTraceResolver<INDEX>::Connect (std::string path, CallbackBase const &cb, co
|
||||
INDEX index = j;
|
||||
tmp.AddElement (index);
|
||||
Ptr<Object> obj = m_iter->Get ();
|
||||
obj->TraceConnect (subpath, cb, tmp);
|
||||
obj->GetTraceResolver ()->Connect (subpath, cb, tmp);
|
||||
j++;
|
||||
}
|
||||
}
|
||||
@@ -163,6 +164,22 @@ ArrayTraceResolver<INDEX>::Disconnect (std::string path, CallbackBase const &cb)
|
||||
}
|
||||
}
|
||||
}
|
||||
template <typename INDEX>
|
||||
void
|
||||
ArrayTraceResolver<INDEX>::PrintAvailable (std::string path, const TraceContext &context, std::ostream &os)
|
||||
{
|
||||
path.append ("/[0-n]");
|
||||
uint32_t j = 0;
|
||||
for (m_iter->Rewind (); m_iter->HasNext (); m_iter->Next ())
|
||||
{
|
||||
TraceContext tmp = context;
|
||||
INDEX index = j;
|
||||
tmp.AddElement (index);
|
||||
Ptr<Object> obj = m_iter->Get ();
|
||||
obj->GetTraceResolver ()->PrintAvailable (path, tmp, os);
|
||||
j++;
|
||||
}
|
||||
}
|
||||
|
||||
}//namespace ns3
|
||||
|
||||
|
||||
@@ -82,7 +82,14 @@ CompositeTraceResolver::DoAddSource (std::string name,
|
||||
{if (subpath == "") {trace->AddCallback (cb, context);}}
|
||||
virtual void Disconnect (std::string subpath, const CallbackBase &cb)
|
||||
{if (subpath == "") {trace->RemoveCallback (cb);}}
|
||||
|
||||
virtual void PrintAvailable (std::string path, const TraceContext &context, std::ostream &os)
|
||||
{
|
||||
os << path << "/" << this->name << " [";
|
||||
TraceContext ctx = context;
|
||||
ctx.Union (this->context);
|
||||
ctx.PrintAvailable (os, ",");
|
||||
os << "]" << std::endl;
|
||||
}
|
||||
TraceSource *trace;
|
||||
} *item = new SourceCompositeItem ();
|
||||
item->name = name;
|
||||
@@ -106,9 +113,17 @@ CompositeTraceResolver::DoAddChild (std::string name, Ptr<Object> child, const T
|
||||
{
|
||||
public:
|
||||
virtual void Connect (std::string subpath, const CallbackBase &cb, const TraceContext &context)
|
||||
{child->TraceConnect (subpath, cb, context);}
|
||||
{child->GetTraceResolver ()->Connect (subpath, cb, context);}
|
||||
virtual void Disconnect (std::string subpath, const CallbackBase &cb)
|
||||
{child->TraceDisconnect (subpath, cb);}
|
||||
virtual void PrintAvailable (std::string path, const TraceContext &context, std::ostream &os)
|
||||
{
|
||||
path.append ("/");
|
||||
path.append (this->name);
|
||||
TraceContext ctx = context;
|
||||
ctx.Union (this->context);
|
||||
this->child->GetTraceResolver ()->PrintAvailable (path, ctx, os);
|
||||
}
|
||||
|
||||
Ptr<Object> child;
|
||||
} *item = new ChildCompositeItem ();
|
||||
@@ -249,6 +264,19 @@ CompositeTraceResolver::Disconnect (std::string path, CallbackBase const &cb)
|
||||
} operation = DisconnectOperation (cb);
|
||||
DoRecursiveOperation (path, operation);
|
||||
}
|
||||
void
|
||||
CompositeTraceResolver::PrintAvailable (std::string path, const TraceContext &context, std::ostream &os)
|
||||
{
|
||||
for (TraceItems::const_iterator i = m_items.begin (); i != m_items.end (); i++)
|
||||
{
|
||||
NS_DEBUG ("print " << (*i)->name);
|
||||
(*i)->PrintAvailable (path, context, os);
|
||||
}
|
||||
if (m_parent != 0)
|
||||
{
|
||||
m_parent->PrintAvailable (path, context, os);
|
||||
}
|
||||
}
|
||||
|
||||
}//namespace ns3
|
||||
|
||||
|
||||
@@ -91,6 +91,7 @@ public:
|
||||
|
||||
virtual void Connect (std::string path, CallbackBase const &cb, const TraceContext &context);
|
||||
virtual void Disconnect (std::string path, CallbackBase const &cb);
|
||||
virtual void PrintAvailable (std::string path, const TraceContext &context, std::ostream &os);
|
||||
|
||||
private:
|
||||
class CompositeItem
|
||||
@@ -99,6 +100,7 @@ private:
|
||||
virtual ~CompositeItem () {}
|
||||
virtual void Connect (std::string subpath, const CallbackBase &cb, const TraceContext &context) = 0;
|
||||
virtual void Disconnect (std::string subpath, const CallbackBase &cb) = 0;
|
||||
virtual void PrintAvailable (std::string path, const TraceContext &context, std::ostream &os) {}
|
||||
|
||||
std::string name;
|
||||
TraceContext context;
|
||||
@@ -155,7 +157,13 @@ CompositeTraceResolver::AddArray (std::string name,
|
||||
{array->Connect (subpath, cb, context);}
|
||||
virtual void Disconnect (std::string subpath, const CallbackBase &cb)
|
||||
{array->Disconnect (subpath, cb);}
|
||||
|
||||
virtual void PrintAvailable (std::string path, const TraceContext &context, std::ostream &os)
|
||||
{
|
||||
path.append ("/");
|
||||
path.append (this->name);
|
||||
TraceContext ctx = context;
|
||||
ctx.Union (this->context);
|
||||
array->PrintAvailable (path, ctx, os);}
|
||||
Ptr<ArrayTraceResolver<INDEX> > array;
|
||||
} *item = new ArrayCompositeItem ();
|
||||
item->name = name;
|
||||
|
||||
@@ -63,6 +63,7 @@ public:
|
||||
InterfaceIdTraceResolver (Ptr<Object> aggregate);
|
||||
virtual void Connect (std::string path, CallbackBase const &cb, const TraceContext &context);
|
||||
virtual void Disconnect (std::string path, CallbackBase const &cb);
|
||||
virtual void PrintAvailable (std::string path, const TraceContext &context, std::ostream &os);
|
||||
private:
|
||||
Ptr<Object> ParseForInterface (std::string path);
|
||||
Ptr<Object> m_aggregate;
|
||||
@@ -91,7 +92,7 @@ InterfaceIdTraceResolver::Connect (std::string path, CallbackBase const &cb, con
|
||||
Ptr<Object> interface = ParseForInterface (path);
|
||||
if (interface != 0)
|
||||
{
|
||||
interface->TraceConnect (GetSubpath (path), cb, context);
|
||||
interface->GetTraceResolver ()->Connect (GetSubpath (path), cb, context);
|
||||
}
|
||||
}
|
||||
void
|
||||
@@ -103,6 +104,11 @@ InterfaceIdTraceResolver::Disconnect (std::string path, CallbackBase const &cb)
|
||||
interface->TraceDisconnect (GetSubpath (path), cb);
|
||||
}
|
||||
}
|
||||
void
|
||||
InterfaceIdTraceResolver::PrintAvailable (std::string path, const TraceContext &context, std::ostream &os)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
InterfaceId::InterfaceId (uint16_t iid)
|
||||
@@ -216,12 +222,7 @@ Object::AddInterface (Ptr<Object> o)
|
||||
void
|
||||
Object::TraceConnect (std::string path, const CallbackBase &cb)
|
||||
{
|
||||
TraceConnect (path, cb, TraceContext ());
|
||||
}
|
||||
void
|
||||
Object::TraceConnect (std::string path, const CallbackBase &cb, const TraceContext &context)
|
||||
{
|
||||
GetTraceResolver ()->Connect (path, cb, context);
|
||||
GetTraceResolver ()->Connect (path, cb, TraceContext ());
|
||||
}
|
||||
void
|
||||
Object::TraceDisconnect (std::string path, const CallbackBase &cb)
|
||||
@@ -229,7 +230,6 @@ Object::TraceDisconnect (std::string path, const CallbackBase &cb)
|
||||
GetTraceResolver ()->Disconnect (path, cb);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
Object::SetInterfaceId (InterfaceId iid)
|
||||
{
|
||||
|
||||
@@ -138,8 +138,8 @@ public:
|
||||
|
||||
|
||||
void TraceConnect (std::string path, const CallbackBase &cb);
|
||||
void TraceConnect (std::string path, const CallbackBase &cb, const TraceContext &context);
|
||||
void TraceDisconnect (std::string path, const CallbackBase &cb);
|
||||
virtual Ptr<TraceResolver> GetTraceResolver (void);
|
||||
protected:
|
||||
/**
|
||||
* \param iid an InterfaceId
|
||||
@@ -155,8 +155,6 @@ protected:
|
||||
* up to their parent's implementation once they are done.
|
||||
*/
|
||||
virtual void DoDispose (void);
|
||||
|
||||
virtual Ptr<TraceResolver> GetTraceResolver (void);
|
||||
private:
|
||||
Ptr<Object> DoQueryInterface (InterfaceId iid) const;
|
||||
bool Check (void) const;
|
||||
|
||||
@@ -69,6 +69,8 @@ public:
|
||||
* This method should behave as Connect.
|
||||
*/
|
||||
virtual void Disconnect (std::string path, CallbackBase const &cb) = 0;
|
||||
|
||||
virtual void PrintAvailable (std::string path, const TraceContext &context, std::ostream &os) = 0;
|
||||
protected:
|
||||
/**
|
||||
* \param path a namespace path
|
||||
|
||||
@@ -171,5 +171,9 @@ NodeList::Disconnect (std::string name, const CallbackBase &cb)
|
||||
{
|
||||
SimulationSingleton<NodeListPriv>::Get ()->GetTraceResolver ()->Disconnect (name, cb);
|
||||
}
|
||||
|
||||
Ptr<TraceResolver>
|
||||
NodeList::GetTraceResolver (void)
|
||||
{
|
||||
return SimulationSingleton<NodeListPriv>::Get ()->GetTraceResolver ();
|
||||
}
|
||||
}//namespace ns3
|
||||
|
||||
@@ -30,6 +30,7 @@ namespace ns3 {
|
||||
|
||||
class Node;
|
||||
class CallbackBase;
|
||||
class TraceResolver;
|
||||
|
||||
class NodeListIndex : public TraceContextElement
|
||||
{
|
||||
@@ -94,6 +95,7 @@ public:
|
||||
* the input namespace regexp.
|
||||
*/
|
||||
static void Disconnect (std::string name, const CallbackBase &cb);
|
||||
static Ptr<TraceResolver> GetTraceResolver (void);
|
||||
private:
|
||||
};
|
||||
|
||||
|
||||
23
utils/print-trace-sources.cc
Normal file
23
utils/print-trace-sources.cc
Normal file
@@ -0,0 +1,23 @@
|
||||
#include "ns3/internet-node.h"
|
||||
#include "ns3/ptr.h"
|
||||
#include "ns3/trace-resolver.h"
|
||||
#include "ns3/node-list.h"
|
||||
#include "ns3/point-to-point-net-device.h"
|
||||
#include "ns3/csma-cd-net-device.h"
|
||||
#include "ns3/queue.h"
|
||||
|
||||
using namespace ns3;
|
||||
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
Ptr<Node> node = Create<InternetNode> ();
|
||||
|
||||
Ptr<PointToPointNetDevice> p2p = Create<PointToPointNetDevice> (node);
|
||||
p2p->AddQueue (Queue::CreateDefault ());
|
||||
Ptr<CsmaCdNetDevice> csma = Create<CsmaCdNetDevice> (node);
|
||||
csma->AddQueue (Queue::CreateDefault ());
|
||||
|
||||
NodeList::GetTraceResolver ()->PrintAvailable ("", TraceContext (), std::cout);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -16,3 +16,7 @@ def build(bld):
|
||||
|
||||
obj = bld.create_ns3_program('replay-simulation', ['simulator'])
|
||||
obj.source = 'replay-simulation.cc'
|
||||
|
||||
obj = bld.create_ns3_program('print-trace-sources',
|
||||
['internet-node', 'csma-cd', 'point-to-point'])
|
||||
obj.source = 'print-trace-sources.cc'
|
||||
|
||||
Reference in New Issue
Block a user