make Queue::CreateDefault use the ComponentManager.
--- 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