make Queue::CreateDefault use the ComponentManager.
authorMathieu Lacage <mathieu.lacage@sophia.inria.fr>
Sun, 13 May 2007 09:35:03 +0200
changeset 584 d843d0d5314d
parent 583 bf6fe8b3c54a
child 585 a009b03b720a
make Queue::CreateDefault use the ComponentManager.
src/devices/p2p/p2p-topology.cc
src/node/drop-tail.cc
src/node/drop-tail.h
src/node/queue.cc
src/node/queue.h
--- a/src/devices/p2p/p2p-topology.cc	Fri May 11 22:33:51 2007 +0200
+++ b/src/devices/p2p/p2p-topology.cc	Sun May 13 09:35:03 2007 +0200
@@ -24,13 +24,11 @@
 
 #include <algorithm>
 #include "ns3/assert.h"
-
 #include "ns3/nstime.h"
-
 #include "ns3/internet-node.h"
 #include "ns3/ipv4-address.h"
-#include "ns3/drop-tail.h"
 #include "ns3/i-ipv4.h"
+#include "ns3/queue.h"
 
 #include "p2p-channel.h"
 #include "p2p-net-device.h"
@@ -49,14 +47,14 @@
 
   Ptr<PointToPointNetDevice> net1 = MakeNewObject<PointToPointNetDevice> (n1);
 
-  Ptr<Queue> q = MakeNewObject<DropTailQueue> ();
+  Ptr<Queue> q = Queue::CreateDefault ();
   net1->AddQueue(q);
   n1->AddDevice (net1);
   net1->Attach (channel);
   
   Ptr<PointToPointNetDevice> net2 = MakeNewObject<PointToPointNetDevice> (n2);
 
-  q = MakeNewObject<DropTailQueue> ();
+  q = Queue::CreateDefault ();
   net2->AddQueue(q);
   n2->AddDevice (net2);
   net2->Attach (channel);
--- a/src/node/drop-tail.cc	Fri May 11 22:33:51 2007 +0200
+++ b/src/node/drop-tail.cc	Sun May 13 09:35:03 2007 +0200
@@ -27,12 +27,13 @@
 static class QueueStackInitializationClass {
 public:
   QueueStackInitializationClass () {
-    Queue::Default (DropTailQueue ());
-    static DropTailQueue queue;
-    Queue::AddDefault (queue, "DropTailQueue");
+    Queue::AddDefault ("DropTailQueue");
   }
 } queue_stack_initialization_class;
 
+const ClassId DropTailQueue::cid = 
+  ComponentManager::RegisterConstructor<DropTailQueue> ("DropTailQueue");
+
 
 DropTailQueue::DropTailQueue () :
   Queue (),
@@ -47,11 +48,6 @@
   NS_DEBUG("DropTailQueue::~DropTailQueue ()");
 }
 
-DropTailQueue* DropTailQueue::Copy() const
-{
-  return new DropTailQueue(*this);
-}
-
 void 
 DropTailQueue::SetMaxPackets (uint32_t npackets)
 {
--- a/src/node/drop-tail.h	Fri May 11 22:33:51 2007 +0200
+++ b/src/node/drop-tail.h	Sun May 13 09:35:03 2007 +0200
@@ -23,6 +23,7 @@
 #include <queue>
 #include "ns3/packet.h"
 #include "ns3/queue.h"
+#include "ns3/component-manager.h"
 
 namespace ns3 {
 
@@ -32,10 +33,10 @@
 
 class DropTailQueue : public Queue {
 public:
+  static const ClassId cid;
   DropTailQueue ();
 
   virtual ~DropTailQueue();
-  virtual DropTailQueue* Copy() const;
 
   void SetMaxPackets (uint32_t npackets);
   uint32_t GetMaxPackets (void);
--- a/src/node/queue.cc	Fri May 11 22:33:51 2007 +0200
+++ b/src/node/queue.cc	Sun May 13 09:35:03 2007 +0200
@@ -19,8 +19,9 @@
 
 #include "ns3/debug.h"
 #include "ns3/composite-trace-resolver.h"
+#include "ns3/default-value.h"
+#include "ns3/component-manager.h"
 #include "queue.h"
-#include "ns3/default-value.h"
 
 NS_DEBUG_COMPONENT_DEFINE ("Queue");
 
@@ -28,8 +29,6 @@
 
 const InterfaceId Queue::iid ("Queue");
 
-Queue* Queue::defaultQueue = 0;
-
 Queue::Queue() : 
   Interface (Queue::iid),
   m_nBytes(0), 
@@ -197,50 +196,23 @@
   m_traceDrop (p);
 }
 
-// Static methods for managing default queue
-
-// Set new default
-void Queue::Default(const Queue& q)
-{
-  delete defaultQueue;      // delete previous (if any)
-  defaultQueue = q.Copy();  // set new default
-}
-
-// Get current default
-Queue& Queue::Default()
-{
-  // ! Need to schedule an "at end" event to delete the default
-  return *defaultQueue;
-}
-
-
-Queue *
+Ptr<Queue>
 Queue::CreateDefault (void)
 {
   std::string defaultValue = GetDefault ()->GetValue ();
-  for (List::iterator i = GetList ()->begin ();
-       i != GetList ()->end (); i++)
-    {
-      if (i->second == defaultValue)
-        {
-          return i->first->Copy ();
-        }
-    }
-  NS_ASSERT (false);
-  // quiet compiler
-  return 0;
+  ClassId classId = ComponentManager::LookupByName (defaultValue);
+  Ptr<Queue> queue = ComponentManager::Create<Queue> (classId, Queue::iid);
+  return queue;
 }
 void 
-Queue::Add (Queue &queue, const std::string &name)
+Queue::Add (const std::string &name)
 {
   GetDefault ()->AddPossibleValue (name);
-  GetList ()->push_back (std::make_pair (&queue, name));
 }
 void 
-Queue::AddDefault (Queue &queue, const std::string &name)
+Queue::AddDefault (const std::string &name)
 {
   GetDefault ()->AddDefaultValue (name);
-  GetList ()->push_back (std::make_pair (&queue, name));
 }
 StringEnumDefaultValue *
 Queue::GetDefault (void)
@@ -248,12 +220,6 @@
   static StringEnumDefaultValue value ("Queue", "Packet Queue");
   return &value;
 }
-Queue::List *
-Queue::GetList (void)
-{
-  static List list;
-  return &list;
-}
 
 
 }; // namespace ns3
--- a/src/node/queue.h	Fri May 11 22:33:51 2007 +0200
+++ b/src/node/queue.h	Sun May 13 09:35:03 2007 +0200
@@ -49,8 +49,6 @@
   Queue ();
   virtual ~Queue ();
 
-  virtual Queue* Copy() const = 0;
-
   TraceResolver *CreateTraceResolver (TraceContext const &context);
 
   bool IsEmpty (void);
@@ -115,22 +113,13 @@
   uint32_t m_nTotalDroppedPackets;
 
 public:
-  static Queue *CreateDefault (void);
-  static void Add (Queue &queue, const std::string &name);
-  static void AddDefault (Queue &queue, const std::string &name);
+  static Ptr<Queue> CreateDefault (void);
+  static void Add (const std::string &name);
+  static void AddDefault (const std::string &name);
 private:
   typedef std::list<std::pair<Queue *,std::string> > List;
   static StringEnumDefaultValue *GetDefault (void);
   static List *GetList (void);
-
-public:
-  // Static methods to manage queue default
-  // Set desired queue default
-  static void    Default(const Queue& q);
-  // Return reference to the current default queue type
-  static Queue&  Default();
-  // Static variable pointing to current default queue
-  static Queue* defaultQueue;
 };
 
 }; // namespace ns3