From a37a1569772e855303698e34afad64fe79feefbb Mon Sep 17 00:00:00 2001 From: Mathieu Lacage Date: Sun, 13 May 2007 09:35:03 +0200 Subject: [PATCH] make Queue::CreateDefault use the ComponentManager. --- src/devices/p2p/p2p-topology.cc | 8 ++---- src/node/drop-tail.cc | 12 +++----- src/node/drop-tail.h | 3 +- src/node/queue.cc | 50 ++++++--------------------------- src/node/queue.h | 17 ++--------- 5 files changed, 20 insertions(+), 70 deletions(-) diff --git a/src/devices/p2p/p2p-topology.cc b/src/devices/p2p/p2p-topology.cc index 95a681d02..2143b946d 100644 --- a/src/devices/p2p/p2p-topology.cc +++ b/src/devices/p2p/p2p-topology.cc @@ -24,13 +24,11 @@ #include #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 @@ PointToPointTopology::AddPointToPointLink( Ptr net1 = MakeNewObject (n1); - Ptr q = MakeNewObject (); + Ptr q = Queue::CreateDefault (); net1->AddQueue(q); n1->AddDevice (net1); net1->Attach (channel); Ptr net2 = MakeNewObject (n2); - q = MakeNewObject (); + q = Queue::CreateDefault (); net2->AddQueue(q); n2->AddDevice (net2); net2->Attach (channel); diff --git a/src/node/drop-tail.cc b/src/node/drop-tail.cc index db7a3bcab..8571bfe8a 100644 --- a/src/node/drop-tail.cc +++ b/src/node/drop-tail.cc @@ -27,12 +27,13 @@ namespace ns3 { 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 () : Queue (), @@ -47,11 +48,6 @@ DropTailQueue::~DropTailQueue () NS_DEBUG("DropTailQueue::~DropTailQueue ()"); } -DropTailQueue* DropTailQueue::Copy() const -{ - return new DropTailQueue(*this); -} - void DropTailQueue::SetMaxPackets (uint32_t npackets) { diff --git a/src/node/drop-tail.h b/src/node/drop-tail.h index 99e52e4f9..ae79b2350 100644 --- a/src/node/drop-tail.h +++ b/src/node/drop-tail.h @@ -23,6 +23,7 @@ #include #include "ns3/packet.h" #include "ns3/queue.h" +#include "ns3/component-manager.h" namespace ns3 { @@ -32,10 +33,10 @@ const int DTQ_NPACKETS_MAX_DEFAULT = 100; 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); diff --git a/src/node/queue.cc b/src/node/queue.cc index 5b3d808bf..b63d9d7b3 100644 --- a/src/node/queue.cc +++ b/src/node/queue.cc @@ -19,8 +19,9 @@ #include "ns3/debug.h" #include "ns3/composite-trace-resolver.h" -#include "queue.h" #include "ns3/default-value.h" +#include "ns3/component-manager.h" +#include "queue.h" NS_DEBUG_COMPONENT_DEFINE ("Queue"); @@ -28,8 +29,6 @@ namespace ns3 { const InterfaceId Queue::iid ("Queue"); -Queue* Queue::defaultQueue = 0; - Queue::Queue() : Interface (Queue::iid), m_nBytes(0), @@ -197,50 +196,23 @@ Queue::Drop (const Packet& p) 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::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 = ComponentManager::Create (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 @@ Queue::GetDefault (void) static StringEnumDefaultValue value ("Queue", "Packet Queue"); return &value; } -Queue::List * -Queue::GetList (void) -{ - static List list; - return &list; -} }; // namespace ns3 diff --git a/src/node/queue.h b/src/node/queue.h index 7d96a6c5e..cafd3808c 100644 --- a/src/node/queue.h +++ b/src/node/queue.h @@ -49,8 +49,6 @@ public: Queue (); virtual ~Queue (); - virtual Queue* Copy() const = 0; - TraceResolver *CreateTraceResolver (TraceContext const &context); bool IsEmpty (void); @@ -115,22 +113,13 @@ private: 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 CreateDefault (void); + static void Add (const std::string &name); + static void AddDefault (const std::string &name); private: typedef std::list > 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