--- a/src/core/array-trace-resolver.h Mon Aug 27 16:02:55 2007 +0200
+++ b/src/core/array-trace-resolver.h Mon Aug 27 20:25:15 2007 +0200
@@ -62,6 +62,7 @@
// 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 @@
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 @@
}
}
}
+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
--- a/src/core/composite-trace-resolver.cc Mon Aug 27 16:02:55 2007 +0200
+++ b/src/core/composite-trace-resolver.cc Mon Aug 27 20:25:15 2007 +0200
@@ -82,7 +82,14 @@
{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 @@
{
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 @@
} 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
--- a/src/core/composite-trace-resolver.h Mon Aug 27 16:02:55 2007 +0200
+++ b/src/core/composite-trace-resolver.h Mon Aug 27 20:25:15 2007 +0200
@@ -91,6 +91,7 @@
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 @@
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 @@
{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;
--- a/src/core/object.cc Mon Aug 27 16:02:55 2007 +0200
+++ b/src/core/object.cc Mon Aug 27 20:25:15 2007 +0200
@@ -63,6 +63,7 @@
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 @@
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 @@
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 @@
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 @@
GetTraceResolver ()->Disconnect (path, cb);
}
-
void
Object::SetInterfaceId (InterfaceId iid)
{
--- a/src/core/object.h Mon Aug 27 16:02:55 2007 +0200
+++ b/src/core/object.h Mon Aug 27 20:25:15 2007 +0200
@@ -138,8 +138,8 @@
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 @@
* 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;
--- a/src/core/trace-resolver.h Mon Aug 27 16:02:55 2007 +0200
+++ b/src/core/trace-resolver.h Mon Aug 27 20:25:15 2007 +0200
@@ -69,6 +69,8 @@
* 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
--- a/src/node/node-list.cc Mon Aug 27 16:02:55 2007 +0200
+++ b/src/node/node-list.cc Mon Aug 27 20:25:15 2007 +0200
@@ -171,5 +171,9 @@
{
SimulationSingleton<NodeListPriv>::Get ()->GetTraceResolver ()->Disconnect (name, cb);
}
-
+Ptr<TraceResolver>
+NodeList::GetTraceResolver (void)
+{
+ return SimulationSingleton<NodeListPriv>::Get ()->GetTraceResolver ();
+}
}//namespace ns3
--- a/src/node/node-list.h Mon Aug 27 16:02:55 2007 +0200
+++ b/src/node/node-list.h Mon Aug 27 20:25:15 2007 +0200
@@ -30,6 +30,7 @@
class Node;
class CallbackBase;
+class TraceResolver;
class NodeListIndex : public TraceContextElement
{
@@ -94,6 +95,7 @@
* the input namespace regexp.
*/
static void Disconnect (std::string name, const CallbackBase &cb);
+ static Ptr<TraceResolver> GetTraceResolver (void);
private:
};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/utils/print-trace-sources.cc Mon Aug 27 20:25:15 2007 +0200
@@ -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;
+}
--- a/utils/wscript Mon Aug 27 16:02:55 2007 +0200
+++ b/utils/wscript Mon Aug 27 20:25:15 2007 +0200
@@ -16,3 +16,7 @@
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'