replace Node::DoCreateTraceResolver with Node::DoFillTraceResolver
authorMathieu Lacage <mathieu.lacage@sophia.inria.fr>
Wed, 01 Aug 2007 12:33:44 +0200
changeset 1194 b8e957eb0a94
parent 1193 ea2185e4e097
child 1195 53f1175dbe94
replace Node::DoCreateTraceResolver with Node::DoFillTraceResolver
src/common/array-trace-resolver.h
src/internet-node/ascii-trace.cc
src/internet-node/internet-node.cc
src/internet-node/internet-node.h
src/internet-node/ipv4-l3-protocol.cc
src/node/node-list.cc
src/node/node.cc
src/node/node.h
--- a/src/common/array-trace-resolver.h	Wed Aug 01 10:29:40 2007 +0200
+++ b/src/common/array-trace-resolver.h	Wed Aug 01 12:33:44 2007 +0200
@@ -81,11 +81,11 @@
    */
   ArrayTraceResolver (TraceContext const &context,
                       Callback<uint32_t> getSize, 
-                      Callback<T *, uint32_t> get);
+                      Callback<T, uint32_t> get);
 private:
   virtual TraceResolverList DoLookup (std::string id) const;
   Callback<uint32_t> m_getSize;
-  Callback<T *, uint32_t> m_get;
+  Callback<T, uint32_t> m_get;
 };
 }//namespace ns3
 
@@ -108,7 +108,7 @@
 template <typename T>
 ArrayTraceResolver<T>::ArrayTraceResolver (TraceContext const &context,
                                            Callback<uint32_t> getSize, 
-                                           Callback<T *, uint32_t> get)
+                                           Callback<T, uint32_t> get)
   : TraceResolver (context),
     m_getSize (getSize),
     m_get (get)
@@ -122,10 +122,10 @@
   {
     for (uint32_t i = 0; i < m_getSize (); i++)
     {
-	  TraceContext context = GetContext ();
+      TraceContext context = GetContext ();
       typename ArrayTraceResolver<T>::Index index = typename ArrayTraceResolver<T>::Index (i);
-	  context.Add (index);
-	  list.push_back (m_get (i)->CreateTraceResolver (context));
+      context.Add (index);
+      list.push_back (m_get (i)->CreateTraceResolver (context));
     }
   }
   return list;
--- a/src/internet-node/ascii-trace.cc	Wed Aug 01 10:29:40 2007 +0200
+++ b/src/internet-node/ascii-trace.cc	Wed Aug 01 12:33:44 2007 +0200
@@ -47,14 +47,14 @@
 AsciiTrace::TraceAllQueues (void)
 {
   Packet::EnableMetadata ();
-  TraceRoot::Connect ("/nodes/*/ipv4/interfaces/*/netdevice/queue/*",
+  TraceRoot::Connect ("/nodes/*/devices/*/queue/*",
                       MakeCallback (&AsciiTrace::LogDevQueue, this));
 }
 void
 AsciiTrace::TraceAllNetDeviceRx (void)
 {
   Packet::EnableMetadata ();
-  TraceRoot::Connect ("/nodes/*/ipv4/interfaces/*/netdevice/rx",
+  TraceRoot::Connect ("/nodes/*/devices/*/rx",
                       MakeCallback (&AsciiTrace::LogDevRx, this));
 }
 
--- a/src/internet-node/internet-node.cc	Wed Aug 01 10:29:40 2007 +0200
+++ b/src/internet-node/internet-node.cc	Wed Aug 01 12:33:44 2007 +0200
@@ -76,16 +76,14 @@
 }
 
 
-TraceResolver *
-InternetNode::DoCreateTraceResolver (TraceContext const &context)
+void
+InternetNode::DoFillTraceResolver (CompositeTraceResolver &resolver)
 {
-  CompositeTraceResolver *resolver = new CompositeTraceResolver (context);
+  Node::DoFillTraceResolver (resolver);
   Ptr<Ipv4L3Protocol> ipv4 = QueryInterface<Ipv4L3Protocol> (Ipv4L3Protocol::iid);
-  resolver->Add ("ipv4",
-                 MakeCallback (&Ipv4L3Protocol::CreateTraceResolver, PeekPointer (ipv4)),
-                 InternetNode::IPV4);
-
-  return resolver;
+  resolver.Add ("ipv4",
+                MakeCallback (&Ipv4L3Protocol::CreateTraceResolver, PeekPointer (ipv4)),
+                InternetNode::IPV4);
 }
 
 void 
--- a/src/internet-node/internet-node.h	Wed Aug 01 10:29:40 2007 +0200
+++ b/src/internet-node/internet-node.h	Wed Aug 01 12:33:44 2007 +0200
@@ -46,7 +46,7 @@
 protected:
   virtual void DoDispose(void);
 private:
-  virtual TraceResolver *DoCreateTraceResolver (TraceContext const &context);
+  virtual void DoFillTraceResolver (CompositeTraceResolver &resolver);
   bool ReceiveFromDevice (Ptr<NetDevice> device, const Packet &p, uint16_t protocolNumber) const;
   void Construct (void);
 };
--- a/src/internet-node/ipv4-l3-protocol.cc	Wed Aug 01 10:29:40 2007 +0200
+++ b/src/internet-node/ipv4-l3-protocol.cc	Wed Aug 01 12:33:44 2007 +0200
@@ -99,8 +99,8 @@
 TraceResolver *
 Ipv4L3Protocol::InterfacesCreateTraceResolver (TraceContext const &context) const
 {
-  ArrayTraceResolver<Ipv4Interface> *resolver = 
-    new ArrayTraceResolver<Ipv4Interface> 
+  ArrayTraceResolver<Ipv4Interface *> *resolver = 
+    new ArrayTraceResolver<Ipv4Interface *> 
     (context,
      MakeCallback (&Ipv4L3Protocol::GetNInterfaces, this),
      MakeCallback (&Ipv4L3Protocol::GetInterface, this));
--- a/src/node/node-list.cc	Wed Aug 01 10:29:40 2007 +0200
+++ b/src/node/node-list.cc	Wed Aug 01 12:33:44 2007 +0200
@@ -53,7 +53,6 @@
   NodeList::Iterator Begin (void);
   NodeList::Iterator End (void);
   TraceResolver *CreateTraceResolver (TraceContext const &context);
-  Node *PeekNode (uint32_t n);
   Ptr<Node> GetNode (uint32_t n);
   uint32_t GetNNodes (void);
 
@@ -99,11 +98,6 @@
 {
   return m_nodes.size ();
 }
-Node *
-NodeListPriv::PeekNode (uint32_t n)
-{
-  return PeekPointer (m_nodes[n]);
-}
 
 Ptr<Node>
 NodeListPriv::GetNode (uint32_t n)
@@ -115,11 +109,11 @@
 TraceResolver *
 NodeListPriv::CreateTraceResolver (TraceContext const &context)
 {
-  ArrayTraceResolver<Node> *resolver =
-    new ArrayTraceResolver<Node>
+  ArrayTraceResolver<Ptr<Node> > *resolver =
+    new ArrayTraceResolver<Ptr<Node> >
     (context, 
      MakeCallback (&NodeListPriv::GetNNodes, this),
-     MakeCallback (&NodeListPriv::PeekNode, this));
+     MakeCallback (&NodeListPriv::GetNode, this));
   return resolver;
 }
 
--- a/src/node/node.cc	Wed Aug 01 10:29:40 2007 +0200
+++ b/src/node/node.cc	Wed Aug 01 12:33:44 2007 +0200
@@ -24,7 +24,7 @@
 #include "application.h"
 #include "packet-socket-factory.h"
 #include "ns3/simulator.h"
-#include "ns3/empty-trace-resolver.h"
+#include "ns3/composite-trace-resolver.h"
 
 namespace ns3{
 
@@ -59,7 +59,9 @@
 TraceResolver *
 Node::CreateTraceResolver (TraceContext const &context)
 {
-  return DoCreateTraceResolver (context);
+  CompositeTraceResolver *resolver = new CompositeTraceResolver (context);
+  DoFillTraceResolver (*resolver);
+  return resolver;
 }
 
 uint32_t 
@@ -120,8 +122,27 @@
   return m_applications.size ();
 }
 
+TraceResolver *
+Node::CreateDevicesTraceResolver (const TraceContext &context)
+{
+  ArrayTraceResolver<Ptr<NetDevice> > *resolver = 
+    new ArrayTraceResolver<Ptr<NetDevice> > (context,
+                                             MakeCallback (&Node::GetNDevices, this), 
+                                             MakeCallback (&Node::GetDevice, this));
+  
+  return resolver;
+}
 
-void Node::DoDispose()
+void
+Node::DoFillTraceResolver (CompositeTraceResolver &resolver)
+{
+  resolver.Add ("devices", 
+                MakeCallback (&Node::CreateDevicesTraceResolver, this),
+                Node::DEVICES);
+}
+
+void 
+Node::DoDispose()
 {
   for (std::vector<Ptr<NetDevice> >::iterator i = m_devices.begin ();
        i != m_devices.end (); i++)
@@ -142,11 +163,6 @@
   Object::DoDispose ();
 }
 
-TraceResolver *
-Node::DoCreateTraceResolver (TraceContext const &context)
-{
-  return new EmptyTraceResolver (context);
-}
 void 
 Node::NotifyDeviceAdded (Ptr<NetDevice> device)
 {}
--- a/src/node/node.h	Wed Aug 01 10:29:40 2007 +0200
+++ b/src/node/node.h	Wed Aug 01 12:33:44 2007 +0200
@@ -34,6 +34,7 @@
 class Application;
 class Packet;
 class Address;
+class CompositeTraceResolver;
 
 /**
  * \brief A network Node.
@@ -175,15 +176,18 @@
    * end of their own DoDispose method.
    */
   virtual void DoDispose (void);
+  /**
+   * \param resolver the resolver to store trace sources in.
+   *
+   * If a subclass wants to add new traces to a Node, it needs
+   * to override this method and record the new trace sources
+   * in the input resolver. Subclasses also _must_ chain up to
+   * their parent's DoFillTraceResolver method prior
+   * to recording they own trace sources.
+   */
+  virtual void DoFillTraceResolver (CompositeTraceResolver &resolver);
 private:
   /**
-   * \param context the trace context
-   * \returns a trace resolver to the user. The user must delete it.
-   *
-   * Subclasses must implement this method.
-   */
-  virtual TraceResolver *DoCreateTraceResolver (TraceContext const &context);
-  /**
    * \param device the device added to this Node.
    *
    * This method is invoked whenever a user calls Node::AddDevice.
@@ -196,7 +200,11 @@
   bool ReceiveFromDevice (Ptr<NetDevice> device, const Packet &packet, 
                           uint16_t protocol, const Address &from);
   void Construct (void);
+  TraceResolver *CreateDevicesTraceResolver (const TraceContext &context);
 
+  enum TraceSource {
+    DEVICES
+  };
   struct ProtocolHandlerEntry {
     ProtocolHandler handler;
     uint16_t protocol;