make Queue::CreateDefault use the ComponentManager.

Mathieu Lacage 2007-05-13 09:35:03 +02:00
parent 3834d248de
commit a37a156977
5 changed files with 20 additions and 70 deletions

View File

@ -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 @@ PointToPointTopology::AddPointToPointLink(
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);

View File

@ -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::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)
{

View File

@ -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 @@ 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);

View File

@ -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>
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 @@ Queue::GetDefault (void)
static StringEnumDefaultValue value ("Queue", "Packet Queue");
return &value;
}
Queue::List *
Queue::GetList (void)
{
static List list;
return &list;
}
}; // namespace ns3

View File

@ -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<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