From fce27dc4dead2b0d8ffbb948afb19f0e95c17e13 Mon Sep 17 00:00:00 2001 From: Mathieu Lacage Date: Mon, 27 Aug 2007 20:25:15 +0200 Subject: [PATCH] add TraceResolver::PrintAvailable method --- src/core/array-trace-resolver.h | 19 ++++++++++++++++- src/core/composite-trace-resolver.cc | 32 ++++++++++++++++++++++++++-- src/core/composite-trace-resolver.h | 10 ++++++++- src/core/object.cc | 16 +++++++------- src/core/object.h | 4 +--- src/core/trace-resolver.h | 2 ++ src/node/node-list.cc | 6 +++++- src/node/node-list.h | 2 ++ utils/print-trace-sources.cc | 23 ++++++++++++++++++++ utils/wscript | 4 ++++ 10 files changed, 102 insertions(+), 16 deletions(-) create mode 100644 utils/print-trace-sources.cc diff --git a/src/core/array-trace-resolver.h b/src/core/array-trace-resolver.h index 116c875ab..0f76f57c9 100644 --- a/src/core/array-trace-resolver.h +++ b/src/core/array-trace-resolver.h @@ -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::Connect (std::string path, CallbackBase const &cb, co INDEX index = j; tmp.AddElement (index); Ptr obj = m_iter->Get (); - obj->TraceConnect (subpath, cb, tmp); + obj->GetTraceResolver ()->Connect (subpath, cb, tmp); j++; } } @@ -163,6 +164,22 @@ ArrayTraceResolver::Disconnect (std::string path, CallbackBase const &cb) } } } +template +void +ArrayTraceResolver::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 obj = m_iter->Get (); + obj->GetTraceResolver ()->PrintAvailable (path, tmp, os); + j++; + } +} }//namespace ns3 diff --git a/src/core/composite-trace-resolver.cc b/src/core/composite-trace-resolver.cc index 972867731..0c6ce941e 100644 --- a/src/core/composite-trace-resolver.cc +++ b/src/core/composite-trace-resolver.cc @@ -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 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 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 diff --git a/src/core/composite-trace-resolver.h b/src/core/composite-trace-resolver.h index ca16b75b7..3be3c332c 100644 --- a/src/core/composite-trace-resolver.h +++ b/src/core/composite-trace-resolver.h @@ -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 > array; } *item = new ArrayCompositeItem (); item->name = name; diff --git a/src/core/object.cc b/src/core/object.cc index 73ade0d61..bd2128c7c 100644 --- a/src/core/object.cc +++ b/src/core/object.cc @@ -63,6 +63,7 @@ public: InterfaceIdTraceResolver (Ptr 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 ParseForInterface (std::string path); Ptr m_aggregate; @@ -91,7 +92,7 @@ InterfaceIdTraceResolver::Connect (std::string path, CallbackBase const &cb, con Ptr 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 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) { diff --git a/src/core/object.h b/src/core/object.h index 1b0825381..affaf223e 100644 --- a/src/core/object.h +++ b/src/core/object.h @@ -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 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 GetTraceResolver (void); private: Ptr DoQueryInterface (InterfaceId iid) const; bool Check (void) const; diff --git a/src/core/trace-resolver.h b/src/core/trace-resolver.h index f22b73352..f0f61f761 100644 --- a/src/core/trace-resolver.h +++ b/src/core/trace-resolver.h @@ -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 diff --git a/src/node/node-list.cc b/src/node/node-list.cc index 2276c0da3..7278f2e3a 100644 --- a/src/node/node-list.cc +++ b/src/node/node-list.cc @@ -171,5 +171,9 @@ NodeList::Disconnect (std::string name, const CallbackBase &cb) { SimulationSingleton::Get ()->GetTraceResolver ()->Disconnect (name, cb); } - +Ptr +NodeList::GetTraceResolver (void) +{ + return SimulationSingleton::Get ()->GetTraceResolver (); +} }//namespace ns3 diff --git a/src/node/node-list.h b/src/node/node-list.h index 6774d8ce7..dfb4e4ce9 100644 --- a/src/node/node-list.h +++ b/src/node/node-list.h @@ -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 GetTraceResolver (void); private: }; diff --git a/utils/print-trace-sources.cc b/utils/print-trace-sources.cc new file mode 100644 index 000000000..81f283f2c --- /dev/null +++ b/utils/print-trace-sources.cc @@ -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 = Create (); + + Ptr p2p = Create (node); + p2p->AddQueue (Queue::CreateDefault ()); + Ptr csma = Create (node); + csma->AddQueue (Queue::CreateDefault ()); + + NodeList::GetTraceResolver ()->PrintAvailable ("", TraceContext (), std::cout); + + return 0; +} diff --git a/utils/wscript b/utils/wscript index d64d46dc5..ebf8b356c 100644 --- a/utils/wscript +++ b/utils/wscript @@ -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'