make Queue::CreateDefault use the ComponentManager.
parent
3834d248de
commit
a37a156977
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue