src/core/ns-unknown-manager.h
changeset 568 e1660959ecbb
parent 533 68d539905954
child 571 ac324a1cba74
--- a/src/core/ns-unknown-manager.h	Thu May 10 18:33:52 2007 +0200
+++ b/src/core/ns-unknown-manager.h	Thu May 10 20:19:26 2007 +0200
@@ -27,6 +27,7 @@
 #include "callback.h"
 #include "ns-unknown.h"
 #include "fatal-error.h"
+#include "ptr.h"
 
 namespace ns3 {
 
@@ -82,51 +83,51 @@
    * Create an instance of the object identified by its
    * ClassId. This method invokes the default constructor.
    */
-  static NsUnknown *Create (ClassId classId);
+  static Ptr<NsUnknown> Create (ClassId classId);
 
   /**
    * \param classId class id of the constructor to invoke.
    * \param a1 argument to pass to the constructor.
    * \return a pointer to the instance created.
-   * \overload NsUnknown *Create (ClassId)
+   * \overload Create (ClassId)
    *
    * Create an instance of the object identified by its
    * ClassId.
    */
   template <typename T1>
-  static NsUnknown *Create (ClassId classId, T1 a1);
+  static Ptr<NsUnknown> Create (ClassId classId, T1 a1);
 
   /**
    * \param classId class id of the constructor to invoke.
    * \param a1 first argument to pass to the constructor.
    * \param a2 second argument to pass to the constructor.
    * \return a pointer to the instance created.
-   * \overload NsUnknown *Create (ClassId)
+   * \overload Create (ClassId)
    *
    * Create an instance of the object identified by its
    * ClassId.
    */
   template <typename T1, typename T2>
-  static NsUnknown *Create (ClassId classId, T1 a1, T2 a2);
+  static Ptr<NsUnknown> Create (ClassId classId, T1 a1, T2 a2);
 
   /**
    * \param classId class id of the constructor to invoke.
    * \param iid interface id to query for
    * \return a pointer to the instance created.
-   * \overload NsUnknown *Create (ClassId)
+   * \overload Create (ClassId)
    *
    * Create an instance of the object identified by its
    * ClassId, call QueryInterface on it, and return the 
    * result.
    */
   template <typename T>
-  static T *Create (ClassId classId, Iid iid);
+  static Ptr<T> Create (ClassId classId, Iid iid);
 
   template <typename T, typename T1>
-  static T *Create (ClassId classId, Iid iid, T1 a1);
+  static Ptr<T> Create (ClassId classId, Iid iid, T1 a1);
 
   template <typename T, typename T1, typename T2>
-  static T *Create (ClassId classId, Iid iid, T1 a1, T2 a2);
+  static Ptr<T> Create (ClassId classId, Iid iid, T1 a1, T2 a2);
 
   /**
    * \param name the symbolic name to associate to this
@@ -136,7 +137,7 @@
   template <typename T>
   static ClassId RegisterConstructor (std::string name)
   {
-    static Callback<NsUnknown *> callback = 
+    static Callback<Ptr<NsUnknown> > callback = 
       MakeCallback (&NsUnknownManager::MakeObjectZero<T>);
     return NsUnknownManager::Register (name, &callback);
   }
@@ -150,7 +151,7 @@
   template <typename T, typename T1>
   static ClassId RegisterConstructor (std::string name)
   {
-    static Callback<NsUnknown *,T1> callback = MakeCallback (&NsUnknownManager::MakeObjectOne<T,T1>);
+    static Callback<Ptr<NsUnknown> ,T1> callback = MakeCallback (&NsUnknownManager::MakeObjectOne<T,T1>);
     return NsUnknownManager::Register (name, &callback);
   }
 
@@ -163,7 +164,7 @@
   template <typename T, typename T1, typename T2>
   static ClassId RegisterConstructor (std::string name)
   {
-    static Callback<NsUnknown *,T1,T2> callback = MakeCallback (&NsUnknownManager::MakeObjectTwo<T,T1,T2>);
+    static Callback<Ptr<NsUnknown>,T1,T2> callback = MakeCallback (&NsUnknownManager::MakeObjectTwo<T,T1,T2>);
     return NsUnknownManager::Register (name, &callback);
   }
 private:
@@ -172,16 +173,16 @@
   template <typename T1, typename T2,
             typename T3, typename T4,
             typename T5>
-  static Callback<NsUnknown *,T1,T2,T3,T4,T5> DoGetCallback (ClassId classId);
+  static Callback<Ptr<NsUnknown>,T1,T2,T3,T4,T5> DoGetCallback (ClassId classId);
 
   template <typename T>
-  static NsUnknown *MakeObjectZero (void);
+  static Ptr<NsUnknown> MakeObjectZero (void);
 
   template <typename T, typename T1>
-  static NsUnknown *MakeObjectOne (T1 a1);
+  static Ptr<NsUnknown> MakeObjectOne (T1 a1);
 
   template <typename T, typename T1, typename T2>
-  static NsUnknown *MakeObjectTwo (T1 a1, T2 a2);
+  static Ptr<NsUnknown> MakeObjectTwo (T1 a1, T2 a2);
 
   typedef std::vector<std::pair<ClassId, CallbackBase *> > List;
   static List *GetList (void);
@@ -196,7 +197,7 @@
 template <typename T1, typename T2,
           typename T3, typename T4,
           typename T5>
-Callback<NsUnknown *,T1,T2,T3,T4,T5>
+Callback<Ptr<NsUnknown>,T1,T2,T3,T4,T5>
 NsUnknownManager::DoGetCallback (ClassId classId)
 {
   CallbackBase *callback = Lookup (classId);
@@ -204,73 +205,70 @@
     {
       NS_FATAL_ERROR ("Invalid Class Id.");
     }
-  Callback<NsUnknown *, T1,T2,T3,T4,T5> reference;
+  Callback<Ptr<NsUnknown>, T1,T2,T3,T4,T5> reference;
   reference.Assign (*callback);
   return reference;
 }
 
 
 template <typename T1>
-NsUnknown *
+Ptr<NsUnknown>
 NsUnknownManager::Create (ClassId classId, T1 a1)
 {
-  Callback<NsUnknown *, T1> callback = DoGetCallback<T1,empty,empty,empty,empty> (classId);
+  Callback<Ptr<NsUnknown>, T1> callback = DoGetCallback<T1,empty,empty,empty,empty> (classId);
   return callback (a1);
 }
 
 template <typename T1, typename T2>
-NsUnknown *
+Ptr<NsUnknown> 
 NsUnknownManager::Create (ClassId classId, T1 a1, T2 a2)
 {
-  Callback<NsUnknown *, T1,T2> callback = DoGetCallback<T1,T2,empty,empty,empty> (classId);
+  Callback<Ptr<NsUnknown> , T1,T2> callback = DoGetCallback<T1,T2,empty,empty,empty> (classId);
   return callback (a1, a2);
 }
 
 template <typename T>
-T *
+Ptr<T>
 NsUnknownManager::Create (ClassId classId, Iid iid)
 {
-  NsUnknown *obj = Create (classId);
-  T *i = obj->QueryInterface<T> (iid);
-  obj->Unref ();
+  Ptr<NsUnknown> obj = Create (classId);
+  Ptr<T> i = obj->QueryInterface<T> (iid);
   return i;
 }
 
 template <typename T, typename T1>
-T *
+Ptr<T>
 NsUnknownManager::Create (ClassId classId, Iid iid, T1 a1)
 {
-  NsUnknown *obj = Create (classId, a1);
-  T *i = obj->QueryInterface<T> (iid);
-  obj->Unref ();
+  Ptr<NsUnknown> obj = Create (classId, a1);
+  Ptr<T> i = obj->QueryInterface<T> (iid);
   return i;
 }
 
 template <typename T, typename T1, typename T2>
-T *
+Ptr<T>
 NsUnknownManager::Create (ClassId classId, Iid iid, T1 a1, T2 a2)
 {
-  NsUnknown *obj = Create (classId, a1, a2);
-  T *i = obj->QueryInterface<T> (iid);
-  obj->Unref ();
+  Ptr<NsUnknown> obj = Create (classId, a1, a2);
+  Ptr<T> i = obj->QueryInterface<T> (iid);
   return i;
 }
 
 
 template <typename T>
-NsUnknown *
+Ptr<NsUnknown> 
 NsUnknownManager::MakeObjectZero (void)
 {
   return new T ();
 }
 template <typename T, typename T1>
-NsUnknown *
+Ptr<NsUnknown> 
 NsUnknownManager::MakeObjectOne (T1 a1)
 {
   return new T (a1);
 }
 template <typename T, typename T1, typename T2>
-NsUnknown *
+Ptr<NsUnknown> 
 NsUnknownManager::MakeObjectTwo (T1 a1, T2 a2)
 {
   return new T (a1, a2);