make Queue::CreateDefault use the ComponentManager.

This commit is contained in:
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

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