make capabilities and sockets refcounted
authorMathieu Lacage <mathieu.lacage@sophia.inria.fr>
Wed, 02 May 2007 23:18:51 +0200
changeset 498 5d5fe14d5751
parent 497 34d6f349478f
child 499 8a469663f7ea
make capabilities and sockets refcounted
src/node/application-list.cc
src/node/application-list.h
src/node/application.h
src/node/internet-node.cc
src/node/ipv4-l4-demux.cc
src/node/ipv4-l4-demux.h
src/node/ipv4-l4-protocol.h
src/node/l3-demux.cc
src/node/l3-demux.h
src/node/l3-protocol.h
src/node/onoff-application.cc
src/node/socket.h
--- a/src/node/application-list.cc	Wed May 02 23:08:41 2007 +0200
+++ b/src/node/application-list.cc	Wed May 02 23:18:51 2007 +0200
@@ -37,7 +37,7 @@
     {
       Application *app = *i;
       app->Dispose ();
-      delete app;
+      app->Unref ();
     }
   m_apps.clear ();
 }
--- a/src/node/application-list.h	Wed May 02 23:08:41 2007 +0200
+++ b/src/node/application-list.h	Wed May 02 23:18:51 2007 +0200
@@ -25,17 +25,19 @@
 #define __APPLICATION_LIST_H__
 
 #include "application.h"
+#include "ns3/object.h"
 #include <vector>
 
 namespace ns3 {
 
-class ApplicationList  {
+class ApplicationList : public Object
+{
 public:
   ApplicationList(Node*);
   // Copy constructor not needed, default one is correct
   virtual ~ApplicationList();
   // Inherited from Capabilty
-  void Dispose (void);
+  virtual void Dispose (void);
   virtual ApplicationList* Copy(Node*) const;
   virtual void SetNode(Node *);              // Sets the node for all apps
   virtual void Add(Application*);      // Add an already new'ed app
--- a/src/node/application.h	Wed May 02 23:08:41 2007 +0200
+++ b/src/node/application.h	Wed May 02 23:18:51 2007 +0200
@@ -49,13 +49,15 @@
 
 #include "ns3/event-id.h"
 #include "ns3/nstime.h"
+#include "ns3/object.h"
 
 namespace ns3 {
 
 class Node;
 class RandomVariable;
   
-class Application {
+class Application : public Object
+{
 public:
   Application(Node *);
   Application(const Application&);  // Copy constructor
--- a/src/node/internet-node.cc	Wed May 02 23:08:41 2007 +0200
+++ b/src/node/internet-node.cc	Wed May 02 23:18:51 2007 +0200
@@ -78,20 +78,20 @@
   if (m_l3Demux != 0)
     {
       m_l3Demux->Dispose ();
-      delete m_l3Demux;
+      m_l3Demux->Unref ();
       m_l3Demux = 0;
     }
   if (m_ipv4L4Demux != 0)
     {
       m_ipv4L4Demux->Dispose ();
-      delete m_ipv4L4Demux;
+      m_ipv4L4Demux->Unref ();
       m_ipv4L4Demux = 0;
     }
 
   if (m_applicationList != 0)
     {
       m_applicationList->Dispose ();
-      delete m_applicationList;
+      m_applicationList->Unref ();
       m_applicationList = 0;
     }
 
--- a/src/node/ipv4-l4-demux.cc	Wed May 02 23:08:41 2007 +0200
+++ b/src/node/ipv4-l4-demux.cc	Wed May 02 23:18:51 2007 +0200
@@ -46,7 +46,7 @@
   for (L4List_t::const_iterator i = m_protocols.begin(); i != m_protocols.end(); ++i)
     {
       (*i)->Dispose ();
-      delete *i;
+      (*i)->Unref ();
     }
   m_protocols.clear ();
   if (m_node != 0)
--- a/src/node/ipv4-l4-demux.h	Wed May 02 23:08:41 2007 +0200
+++ b/src/node/ipv4-l4-demux.h	Wed May 02 23:18:51 2007 +0200
@@ -26,7 +26,7 @@
 #define IPV4_L4_DEMUX_H
 
 #include <list>
-
+#include "ns3/object.h"
 
 namespace ns3 {
 
@@ -38,7 +38,8 @@
 /**
  * \brief L4 Ipv4 Demux
  */
-class Ipv4L4Demux {
+class Ipv4L4Demux : public Object
+{
 public:
   typedef int Ipv4L4ProtocolTraceType;
   Ipv4L4Demux (Node *node);
--- a/src/node/ipv4-l4-protocol.h	Wed May 02 23:08:41 2007 +0200
+++ b/src/node/ipv4-l4-protocol.h	Wed May 02 23:18:51 2007 +0200
@@ -25,6 +25,7 @@
 #ifndef IPV4_L4_PROTOCOL_H
 #define IPV4_L4_PROTOCOL_H
 
+#include "ns3/object.h"
 
 namespace ns3 {
 
@@ -44,7 +45,8 @@
  * If you want to implement a new L4 protocol, all you have to do is
  * implement a subclass of this base class and add it to an L4Demux.
  */  
-class Ipv4L4Protocol {
+class Ipv4L4Protocol : public Object
+{
 public:
   Ipv4L4Protocol(int protocolNumber, int version);
   virtual ~Ipv4L4Protocol ();
--- a/src/node/l3-demux.cc	Wed May 02 23:08:41 2007 +0200
+++ b/src/node/l3-demux.cc	Wed May 02 23:18:51 2007 +0200
@@ -46,7 +46,7 @@
   for (L3Map_t::iterator i = m_protocols.begin(); i != m_protocols.end(); ++i)
     {
       i->second->Dispose ();
-      delete i->second;
+      i->second->Unref ();
     }
   m_protocols.clear ();
   if (m_node != 0)
--- a/src/node/l3-demux.h	Wed May 02 23:08:41 2007 +0200
+++ b/src/node/l3-demux.h	Wed May 02 23:18:51 2007 +0200
@@ -28,6 +28,7 @@
 #define L3_DEMUX_H
 
 #include <map>
+#include "ns3/object.h"
 
 namespace ns3 {
 
@@ -39,7 +40,7 @@
 /**
  * \brief L3 Demux 
  */
-class L3Demux
+class L3Demux : public Object
 {
 public:
   typedef int ProtocolTraceType;
--- a/src/node/l3-protocol.h	Wed May 02 23:08:41 2007 +0200
+++ b/src/node/l3-protocol.h	Wed May 02 23:18:51 2007 +0200
@@ -25,6 +25,8 @@
 #ifndef L3_PROTOCOL_H
 #define L3_PROTOCOL_H
 
+#include "ns3/object.h"
+
 namespace ns3 {
 
 class Packet;
@@ -36,7 +38,7 @@
 /**
  * ::Send is always defined in subclasses.
  */
-class L3Protocol {
+class L3Protocol : public Object {
 public:
   L3Protocol(int protocolNumber, int version);
   virtual ~L3Protocol ();
--- a/src/node/onoff-application.cc	Wed May 02 23:08:41 2007 +0200
+++ b/src/node/onoff-application.cc	Wed May 02 23:18:51 2007 +0200
@@ -95,11 +95,14 @@
 void
 OnOffApplication::Dispose (void)
 {
-  delete m_socket;
+  if (m_socket != 0)
+    {
+      m_socket->Unref ();
+      m_socket = 0;
+    }
   delete m_onTime;
   delete m_offTime;
 
-  m_socket = 0;
   m_onTime = 0;
   m_offTime = 0;
 
--- a/src/node/socket.h	Wed May 02 23:08:41 2007 +0200
+++ b/src/node/socket.h	Wed May 02 23:18:51 2007 +0200
@@ -23,6 +23,7 @@
 
 #include "ns3/callback.h"
 #include "ipv4-address.h"
+#include "ns3/object.h"
 #include <stdint.h>
 
 namespace ns3 {
@@ -38,7 +39,8 @@
  * to the BSD API to make it easier those who know the BSD API to use
  * this API.
  */
-class Socket {
+class Socket : public Object
+{
 public:
   virtual ~Socket();