rework the refcounting framework to use the MakeNewObject function
authorMathieu Lacage <mathieu.lacage@sophia.inria.fr>
Fri, 11 May 2007 08:59:49 +0200
changeset 571 ac324a1cba74
parent 570 cc38d7fae91e
child 572 8776da5b61cc
rework the refcounting framework to use the MakeNewObject function
examples/simple-p2p.cc
samples/main-simple.cc
src/core/ns-unknown-manager.cc
src/core/ns-unknown-manager.h
src/core/ns-unknown.cc
src/core/object.cc
src/devices/p2p/p2p-topology.cc
src/internet-node/internet-node.cc
src/internet-node/udp.cc
--- a/examples/simple-p2p.cc	Fri May 11 08:59:11 2007 +0200
+++ b/examples/simple-p2p.cc	Fri May 11 08:59:49 2007 +0200
@@ -101,10 +101,10 @@
 
   // Here, we will explicitly create four nodes.  In more sophisticated
   // topologies, we could configure a node factory.
-  Ptr<Node> n0 = new InternetNode ();
-  Ptr<Node> n1 = new InternetNode (); 
-  Ptr<Node> n2 = new InternetNode (); 
-  Ptr<Node> n3 = new InternetNode ();
+  Ptr<Node> n0 = MakeNewObject<InternetNode> ();
+  Ptr<Node> n1 = MakeNewObject<InternetNode> (); 
+  Ptr<Node> n2 = MakeNewObject<InternetNode> (); 
+  Ptr<Node> n3 = MakeNewObject<InternetNode> ();
 
   // We create the channels first without any IP addressing information
   Ptr<PointToPointChannel> channel0 = 
@@ -134,7 +134,7 @@
 
   // Create the OnOff application to send UDP datagrams of size
   // 210 bytes at a rate of 448 Kb/s
-  Ptr<OnOffApplication> ooff0 = new OnOffApplication(
+  Ptr<OnOffApplication> ooff0 = MakeNewObject<OnOffApplication> (
     n0, 
     Ipv4Address("10.1.3.2"), 
     80, 
@@ -151,7 +151,7 @@
   ooff0->Stop (Seconds(10.0));
 
   // Create a similar flow from n3 to n1, starting at time 1.1 seconds
-  Ptr<OnOffApplication> ooff1 = new OnOffApplication(
+  Ptr<OnOffApplication> ooff1 = MakeNewObject<OnOffApplication> (
     n3, 
     Ipv4Address("10.1.2.1"), 
     80, 
--- a/samples/main-simple.cc	Fri May 11 08:59:11 2007 +0200
+++ b/samples/main-simple.cc	Fri May 11 08:59:49 2007 +0200
@@ -38,7 +38,7 @@
 void
 RunSimulation (void)
 {
-  Ptr<InternetNode> a = new InternetNode ();
+  Ptr<InternetNode> a = MakeNewObject<InternetNode> ();
 
   Ptr<IUdp> udp = a->QueryInterface<IUdp> (IUdp::iid);
 
--- a/src/core/ns-unknown-manager.cc	Fri May 11 08:59:11 2007 +0200
+++ b/src/core/ns-unknown-manager.cc	Fri May 11 08:59:49 2007 +0200
@@ -141,7 +141,7 @@
     m_oneBoolInvoked (false),
     m_oneUi32Invoked (false)
 {
-  ns3::Ptr<B> b = new B ();
+  ns3::Ptr<B> b = ns3::MakeNewObject<B> ();
   AddInterface (b);
 }
 
@@ -152,7 +152,7 @@
     m_oneUi32Invoked (false),
     m_bool (bo)
 {
-  ns3::Ptr<B> b = new B ();
+  ns3::Ptr<B> b = ns3::MakeNewObject<B> ();
   AddInterface (b);
 }
 
@@ -163,7 +163,7 @@
     m_oneUi32Invoked (true),
     m_ui32 (i)
 {
-  ns3::Ptr<B> b = new B ();
+  ns3::Ptr<B> b = ns3::MakeNewObject<B> ();
   AddInterface (b);
 }
 
--- a/src/core/ns-unknown-manager.h	Fri May 11 08:59:11 2007 +0200
+++ b/src/core/ns-unknown-manager.h	Fri May 11 08:59:49 2007 +0200
@@ -259,19 +259,19 @@
 Ptr<NsUnknown> 
 NsUnknownManager::MakeObjectZero (void)
 {
-  return new T ();
+  return MakeNewObject<T> ();
 }
 template <typename T, typename T1>
 Ptr<NsUnknown> 
 NsUnknownManager::MakeObjectOne (T1 a1)
 {
-  return new T (a1);
+  return MakeNewObject<T> (a1);
 }
 template <typename T, typename T1, typename T2>
 Ptr<NsUnknown> 
 NsUnknownManager::MakeObjectTwo (T1 a1, T2 a2)
 {
-  return new T (a1, a2);
+  return MakeNewObject<T> (a1, a2);
 }
 
 } // namespace ns3
--- a/src/core/ns-unknown.cc	Fri May 11 08:59:11 2007 +0200
+++ b/src/core/ns-unknown.cc	Fri May 11 08:59:49 2007 +0200
@@ -65,7 +65,7 @@
 };
 
 NsUnknownImpl::NsUnknownImpl (Iid iid, NsUnknown * interface)
-  : m_ref (0),
+  : m_ref (1),
     m_disposed (false)
 {
   NS_DEBUG ("new " << this << " ref=" << m_ref);
@@ -316,9 +316,9 @@
   //DerivedAB *derivedAB;
 
 
-  Ptr<A> a = new A ();
+  Ptr<A> a = MakeNewObject<A> ();
 
-  a = new A ();
+  a = MakeNewObject<A> ();
   Ptr<A> a1 = a->QueryInterface<A> (A::iid);
   if (a1 == 0 || a1 != a)
     {
@@ -330,14 +330,14 @@
       ok = false;
     }
 
-  Ptr<B> b = new B ();
+  Ptr<B> b = MakeNewObject<B> ();
   Ptr<B> b1 = b->QueryInterface<B> (B::iid);
   if (b1 == 0 || b1 != b)
     {
       ok = false;
     }
   
-  a = new A ();
+  a = MakeNewObject<A> ();
   a->AddInterface (b);
   b1 = b->QueryInterface<B> (B::iid);
   if (b1 == 0 || b1 != b)
@@ -360,7 +360,7 @@
       ok = false;
     }
 
-  Ptr<Derived> derived = new Derived ();
+  Ptr<Derived> derived = MakeNewObject<Derived> ();
   Ptr<Base> base = derived->QueryInterface<Base> (Base::iid);
   if (base == 0)
     {
--- a/src/core/object.cc	Fri May 11 08:59:11 2007 +0200
+++ b/src/core/object.cc	Fri May 11 08:59:49 2007 +0200
@@ -27,7 +27,7 @@
 namespace ns3 {
 
 Object::Object ()
-  : m_count (0),
+  : m_count (1),
     m_disposed (false)
 {
   NS_DEBUG ("Object::Object: m_count=0");
--- a/src/devices/p2p/p2p-topology.cc	Fri May 11 08:59:11 2007 +0200
+++ b/src/devices/p2p/p2p-topology.cc	Fri May 11 08:59:49 2007 +0200
@@ -45,15 +45,15 @@
   const DataRate& bps,
   const Time& delay)
 {
-  Ptr<PointToPointChannel> channel = new PointToPointChannel(bps, delay);
+  Ptr<PointToPointChannel> channel = MakeNewObject<PointToPointChannel> (bps, delay);
 
-  Ptr<PointToPointNetDevice> net1 = new PointToPointNetDevice(n1);
+  Ptr<PointToPointNetDevice> net1 = MakeNewObject<PointToPointNetDevice> (n1);
 
   net1->AddQueue(Queue::Default().Copy());
   n1->AddDevice (net1);
   net1->Attach (channel);
   
-  Ptr<PointToPointNetDevice> net2 = new PointToPointNetDevice(n2);
+  Ptr<PointToPointNetDevice> net2 = MakeNewObject<PointToPointNetDevice> (n2);
 
   net2->AddQueue(Queue::Default().Copy());
   n2->AddDevice (net2);
--- a/src/internet-node/internet-node.cc	Fri May 11 08:59:11 2007 +0200
+++ b/src/internet-node/internet-node.cc	Fri May 11 08:59:49 2007 +0200
@@ -41,22 +41,22 @@
 
 InternetNode::InternetNode()
 {
-  Ptr<Ipv4> ipv4 = new Ipv4 (this);
-  Ptr<Arp> arp = new Arp (this);
-  Ptr<Udp> udp = new Udp (this);
+  Ptr<Ipv4> ipv4 = MakeNewObject<Ipv4> (this);
+  Ptr<Arp> arp = MakeNewObject<Arp> (this);
+  Ptr<Udp> udp = MakeNewObject<Udp> (this);
 
-  Ptr<ApplicationList> applicationList = new ApplicationList(this);
-  Ptr<L3Demux> l3Demux = new L3Demux(this);
-  Ptr<Ipv4L4Demux> ipv4L4Demux = new Ipv4L4Demux(this);
+  Ptr<ApplicationList> applicationList = MakeNewObject<ApplicationList> (this);
+  Ptr<L3Demux> l3Demux = MakeNewObject<L3Demux> (this);
+  Ptr<Ipv4L4Demux> ipv4L4Demux = MakeNewObject<Ipv4L4Demux> (this);
 
   l3Demux->Insert (ipv4);
   l3Demux->Insert (arp);
   ipv4L4Demux->Insert (udp);
 
-  Ptr<IUdpImpl> udpImpl = new IUdpImpl (udp);
-  Ptr<IArpPrivate> arpPrivate = new IArpPrivate (arp);
-  Ptr<IIpv4Impl> ipv4Impl = new IIpv4Impl (ipv4);
-  Ptr<IIpv4Private> ipv4Private = new IIpv4Private (ipv4);
+  Ptr<IUdpImpl> udpImpl = MakeNewObject<IUdpImpl> (udp);
+  Ptr<IArpPrivate> arpPrivate = MakeNewObject<IArpPrivate> (arp);
+  Ptr<IIpv4Impl> ipv4Impl = MakeNewObject<IIpv4Impl> (ipv4);
+  Ptr<IIpv4Private> ipv4Private = MakeNewObject<IIpv4Private> (ipv4);
 
   NsUnknown::AddInterface (ipv4Private);
   NsUnknown::AddInterface (ipv4Impl);
--- a/src/internet-node/udp.cc	Fri May 11 08:59:11 2007 +0200
+++ b/src/internet-node/udp.cc	Fri May 11 08:59:49 2007 +0200
@@ -68,7 +68,7 @@
 Ptr<Socket>
 Udp::CreateSocket (void)
 {
-  Ptr<Socket> socket = new UdpSocket (m_node, this);
+  Ptr<Socket> socket = MakeNewObject<UdpSocket> (m_node, this);
   return socket;
 }