--- a/src/core/component-manager.cc Wed Jan 02 09:25:31 2008 +0100
+++ b/src/core/component-manager.cc Wed Jan 02 10:33:39 2008 +0100
@@ -100,10 +100,10 @@
List *list = Singleton<List>::Get ();
for (List::const_iterator i = list->begin (); i != list->end (); i++)
{
- for (std::vector<const InterfaceId *>::const_iterator j = i->m_supportedInterfaces.begin ();
+ for (std::vector<InterfaceId>::const_iterator j = i->m_supportedInterfaces.begin ();
j != i->m_supportedInterfaces.end (); j++)
{
- if (*(*j) == iid)
+ if (*j == iid)
{
classIdList.push_back (i->m_classId);
break;
@@ -116,30 +116,30 @@
void
ComponentManager::Register (ClassId classId, CallbackBase *callback,
- std::vector<const InterfaceId *> supportedInterfaces)
+ std::vector<InterfaceId> supportedInterfaces)
{
List *list = Singleton<List>::Get ();
struct ClassIdEntry entry = ClassIdEntry (classId);
entry.m_callback = callback;
bool foundObject = false;
- for (std::vector<const InterfaceId *>::iterator i = supportedInterfaces.begin ();
+ for (std::vector<InterfaceId>::iterator i = supportedInterfaces.begin ();
i != supportedInterfaces.end (); i++)
{
- if (*i == &Object::iid)
+ if (*i == Object::iid ())
{
foundObject = true;
}
}
if (!foundObject)
{
- supportedInterfaces.push_back (&Object::iid);
+ supportedInterfaces.push_back (Object::iid ());
}
entry.m_supportedInterfaces = supportedInterfaces;
list->push_back (entry);
}
void
-RegisterCallback (ClassId classId, CallbackBase *callback, std::vector<const InterfaceId *> supportedInterfaces)
+RegisterCallback (ClassId classId, CallbackBase *callback, std::vector<InterfaceId> supportedInterfaces)
{
return ComponentManager::Register (classId, callback, supportedInterfaces);
}
@@ -147,12 +147,12 @@
ClassIdDefaultValue::ClassIdDefaultValue (std::string name,
std::string help,
- const InterfaceId &iid,
+ InterfaceId iid,
std::string defaultValue)
: DefaultValueBase (name, help),
m_defaultName (defaultValue),
m_name (defaultValue),
- m_interfaceId (&iid)
+ m_interfaceId (iid)
{
DefaultValueList::Add (this);
}
@@ -180,7 +180,7 @@
{
return false;
}
- std::vector<ClassId> classIdList = ComponentManager::LookupByInterfaceId (*m_interfaceId);
+ std::vector<ClassId> classIdList = ComponentManager::LookupByInterfaceId (m_interfaceId);
for (std::vector<ClassId>::const_iterator i = classIdList.begin ();
i != classIdList.end (); i++)
{
@@ -196,7 +196,7 @@
std::string
ClassIdDefaultValue::DoGetType (void) const
{
- std::vector<ClassId> classIdList = ComponentManager::LookupByInterfaceId (*m_interfaceId);
+ std::vector<ClassId> classIdList = ComponentManager::LookupByInterfaceId (m_interfaceId);
std::ostringstream oss;
oss << "(";
for (std::vector<ClassId>::const_iterator i = classIdList.begin ();
@@ -234,12 +234,14 @@
class B : public ns3::Object
{
public:
- static const ns3::InterfaceId iid;
+ static ns3::InterfaceId iid (void) {
+ static ns3::InterfaceId iid = ns3::MakeInterfaceId ("B", Object::iid ());
+ return iid;
+ }
+
B ();
};
-const ns3::InterfaceId B::iid = MakeInterfaceId ("B", Object::iid);
-
B::B ()
{}
@@ -251,7 +253,11 @@
static const ns3::ClassId cidOneBool;
static const ns3::ClassId cidOneUi32;
static const ns3::ClassId cidOther;
- static const ns3::InterfaceId iid;
+ static ns3::InterfaceId iid (void) {
+ static ns3::InterfaceId iid = ns3::MakeInterfaceId ("A", Object::iid ());
+ return iid;
+ }
+
A ();
A (bool);
@@ -265,10 +271,9 @@
int m_ui32;
};
-const ns3::ClassId A::cidZero = ns3::MakeClassId<A> ("A", A::iid);
-const ns3::ClassId A::cidOneBool = ns3::MakeClassId <A,bool> ("ABool", A::iid);
-const ns3::ClassId A::cidOneUi32 = ns3::MakeClassId <A,uint32_t> ("AUi32", A::iid);
-const ns3::InterfaceId A::iid = ns3::MakeInterfaceId ("A", Object::iid);
+const ns3::ClassId A::cidZero = ns3::MakeClassId<A> ("A", A::iid ());
+const ns3::ClassId A::cidOneBool = ns3::MakeClassId <A,bool> ("ABool", A::iid ());
+const ns3::ClassId A::cidOneUi32 = ns3::MakeClassId <A,uint32_t> ("AUi32", A::iid ());
A::A ()
: m_zeroInvoked (true),
@@ -302,24 +307,31 @@
class X : public A
{
public:
- static const ns3::InterfaceId iid;
+ static ns3::InterfaceId iid (void) {
+ static ns3::InterfaceId iid = ns3::MakeInterfaceId ("X", A::iid ());
+ return iid;
+ }
+
};
class C : public X
{
public:
- static const ns3::InterfaceId iid;
+ static ns3::InterfaceId iid (void) {
+ static ns3::InterfaceId iid = ns3::MakeInterfaceId ("C", X::iid ());
+ return iid;
+ }
};
class D : public C
{
public:
- static const ns3::InterfaceId iid;
+ static ns3::InterfaceId iid (void) {
+ static ns3::InterfaceId iid = ns3::MakeInterfaceId ("D", C::iid ());
+ return iid;
+ }
static const ns3::ClassId cid;
};
-const ns3::InterfaceId X::iid = ns3::MakeInterfaceId ("X", A::iid);
-const ns3::InterfaceId C::iid = ns3::MakeInterfaceId ("C", X::iid);
-const ns3::InterfaceId D::iid = ns3::MakeInterfaceId ("D", C::iid);
-const ns3::ClassId D::cid = ns3::MakeClassId<D> ("D", A::iid, X::iid, C::iid, D::iid);
+const ns3::ClassId D::cid = ns3::MakeClassId<D> ("D", A::iid (), X::iid (), C::iid (), D::iid ());
}