add TraceResolver::PrintAvailable method

This commit is contained in:
Mathieu Lacage
2007-08-27 20:25:15 +02:00
parent b41cef3631
commit fce27dc4de
10 changed files with 102 additions and 16 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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;

View File

@@ -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)
{

View File

@@ -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;

View File

@@ -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

View File

@@ -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

View File

@@ -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:
};

View 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;
}

View File

@@ -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'