src/core/ns-unknown.cc
changeset 568 e1660959ecbb
parent 567 6fb98941c36f
child 571 ac324a1cba74
--- a/src/core/ns-unknown.cc	Thu May 10 18:33:52 2007 +0200
+++ b/src/core/ns-unknown.cc	Thu May 10 20:19:26 2007 +0200
@@ -53,9 +53,9 @@
   void RefAll (NsUnknownImpl *other);
   void Unref (void);
   void UnrefAll (void);
-  NsUnknown *DoQueryInterface (Iid iid) const;
+  NsUnknown *PeekQueryInterface (Iid iid) const;
   void DoDisposeAll (void);
-  void AddInterface (NsUnknown *interface);
+  void AddInterface (NsUnknown * interface);
   void AddSelfInterface (Iid iid, NsUnknown *interface);
 private:
   typedef std::list<std::pair<Iid,NsUnknown *> > List;
@@ -64,7 +64,7 @@
   bool m_disposed;
 };
 
-NsUnknownImpl::NsUnknownImpl (Iid iid, NsUnknown *interface)
+NsUnknownImpl::NsUnknownImpl (Iid iid, NsUnknown * interface)
   : m_ref (0),
     m_disposed (false)
 {
@@ -124,14 +124,13 @@
   m_disposed = true;
 }
 NsUnknown *
-NsUnknownImpl::DoQueryInterface (Iid iid) const
+NsUnknownImpl::PeekQueryInterface (Iid iid) const
 {
   for (List::const_iterator i = m_list.begin ();
        i != m_list.end (); i++)
     {
       if (i->first == iid)
 	{
-	  i->second->Ref ();
 	  return i->second;
 	}
     }
@@ -206,25 +205,26 @@
     }
 }
 
-NsUnknown *
+Ptr<NsUnknown>
 NsUnknown::DoQueryInterface (Iid iid) const
 {
-  return m_impl->DoQueryInterface (iid);
+  return m_impl->PeekQueryInterface (iid);
 }
 
 void 
-NsUnknown::AddInterface (NsUnknown *interface)
+NsUnknown::AddInterface (Ptr<NsUnknown> interface)
 {
-  m_impl->AddInterface (interface);
-  m_impl->RefAll (interface->m_impl);
-  interface->m_impl->UnrefAll ();
-  interface->m_impl = m_impl;
+  NsUnknown *p = interface.Peek ();
+  m_impl->AddInterface (p);
+  m_impl->RefAll (p->m_impl);
+  p->m_impl->UnrefAll ();
+  p->m_impl = m_impl;
 }
 
 void
-NsUnknown::AddSelfInterface (Iid iid, NsUnknown *interface)
+NsUnknown::AddSelfInterface (Iid iid, Ptr<NsUnknown> interface)
 {
-  m_impl->AddSelfInterface (iid, interface);
+  m_impl->AddSelfInterface (iid, interface.Peek ());
 }
 
 
@@ -316,31 +316,26 @@
   //DerivedAB *derivedAB;
 
 
-  A *a = new A ();
-  a->Unref ();
+  Ptr<A> a = new A ();
 
   a = new A ();
-  A *a1 = a->QueryInterface<A> (A::iid);
+  Ptr<A> a1 = a->QueryInterface<A> (A::iid);
   if (a1 == 0 || a1 != a)
     {
       ok = false;
     }
-  a1->Unref ();
   a1 = a->QueryInterface<A> (A::iid);
   if (a1 == 0 || a1 != a)
     {
       ok = false;
     }
-  a1->Unref ();
-  a->Unref ();
 
-  B *b = new B ();
-  B *b1 = b->QueryInterface<B> (B::iid);
+  Ptr<B> b = new B ();
+  Ptr<B> b1 = b->QueryInterface<B> (B::iid);
   if (b1 == 0 || b1 != b)
     {
       ok = false;
     }
-  b1->Unref ();
   
   a = new A ();
   a->AddInterface (b);
@@ -349,43 +344,33 @@
     {
       ok = false;
     }
-  b1->Unref ();
   a1 = b->QueryInterface<A> (A::iid);
   if (a1 == 0 || a1 != a)
     {
       ok = false;
     }
-  a1->Unref ();
   a1 = a->QueryInterface<A> (A::iid);
   if (a1 == 0 || a1 != a)
     {
       ok = false;
     }
-  a1->Unref ();
   b1 = a->QueryInterface<B> (B::iid);
   if (b1 == 0 || b1 != b)
     {
       ok = false;
     }
-  b1->Unref ();
-  
-  a->Unref ();
-  b->Unref ();
 
-  Derived *derived = new Derived ();
-  Base *base = derived->QueryInterface<Base> (Base::iid);
+  Ptr<Derived> derived = new Derived ();
+  Ptr<Base> base = derived->QueryInterface<Base> (Base::iid);
   if (base == 0)
     {
       ok = false;
     }
-  Derived *derived1 = base->QueryInterface<Derived> (Derived::iid);
+  Ptr<Derived> derived1 = base->QueryInterface<Derived> (Derived::iid);
   if (derived1 == 0 || derived1 != derived)
     {
       ok = false;
     }
-  derived1->Unref ();
-  base->Unref ();
-  derived->Unref ();
 
   return ok;
 }