src/core/component-manager.cc
changeset 2232 9abd038ee588
parent 2231 a5b898c1ee2c
child 2238 05affd9d0dc1
--- 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 ());
 
 }