Title: [173383] trunk/Source/WTF
Revision
173383
Author
[email protected]
Date
2014-09-08 10:26:37 -0700 (Mon, 08 Sep 2014)

Log Message

Make OSObjectPtr a bit more like RefPtr
https://bugs.webkit.org/show_bug.cgi?id=136613

Reviewed by Darin Adler.

Address some of Darin's feedback by:
- Making the adopting constructor private and friending adoptOSObject().
- Implementing the assignment operator using swap.
- Adding a move assignment operator.

* wtf/OSObjectPtr.h:
(WTF::OSObjectPtr::operator=):
(WTF::OSObjectPtr::swap):
(WTF::OSObjectPtr::OSObjectPtr):

Modified Paths

Diff

Modified: trunk/Source/WTF/ChangeLog (173382 => 173383)


--- trunk/Source/WTF/ChangeLog	2014-09-08 17:10:01 UTC (rev 173382)
+++ trunk/Source/WTF/ChangeLog	2014-09-08 17:26:37 UTC (rev 173383)
@@ -1,3 +1,20 @@
+2014-09-07  Sam Weinig  <[email protected]>
+
+        Make OSObjectPtr a bit more like RefPtr
+        https://bugs.webkit.org/show_bug.cgi?id=136613
+
+        Reviewed by Darin Adler.
+
+        Address some of Darin's feedback by:
+        - Making the adopting constructor private and friending adoptOSObject().
+        - Implementing the assignment operator using swap.
+        - Adding a move assignment operator.
+
+        * wtf/OSObjectPtr.h:
+        (WTF::OSObjectPtr::operator=):
+        (WTF::OSObjectPtr::swap):
+        (WTF::OSObjectPtr::OSObjectPtr):
+
 2014-09-08  Jessie Berlin  <[email protected]>
 
         More build fixes after r173374.

Modified: trunk/Source/WTF/wtf/OSObjectPtr.h (173382 => 173383)


--- trunk/Source/WTF/wtf/OSObjectPtr.h	2014-09-08 17:10:01 UTC (rev 173382)
+++ trunk/Source/WTF/wtf/OSObjectPtr.h	2014-09-08 17:26:37 UTC (rev 173383)
@@ -49,7 +49,8 @@
 
 namespace WTF {
 
-struct AdoptOSObject { };
+template<typename T> class OSObjectPtr;
+template<typename T> OSObjectPtr<T> adoptOSObject(T);
 
 template<typename T>
 static inline void retainOSObject(T ptr)
@@ -86,11 +87,6 @@
     {
     }
 
-    OSObjectPtr(AdoptOSObject, T ptr)
-        : m_ptr(ptr)
-    {
-    }
-
     ~OSObjectPtr()
     {
         if (m_ptr)
@@ -117,16 +113,15 @@
 
     OSObjectPtr& operator=(const OSObjectPtr& other)
     {
-        T optr = other.get();
-        if (optr)
-            retainOSObject(optr);
+        OSObjectPtr ptr = other;
+        swap(ptr);
+        return *this;
+    }
 
-        T ptr = m_ptr;
-        m_ptr = optr;
-
-        if (ptr)
-            releaseOSObject(ptr);
-
+    OSObjectPtr& operator=(OSObjectPtr&& other)
+    {
+        OSObjectPtr ptr = WTF::move(other);
+        swap(ptr);
         return *this;
     }
 
@@ -138,13 +133,27 @@
 
         return *this;
     }
+
+    void swap(OSObjectPtr& other)
+    {
+        std::swap(m_ptr, other.m_ptr);
+    }
+
+    friend OSObjectPtr adoptOSObject<T>(T);
+
 private:
+    struct AdoptOSObject { };
+    OSObjectPtr(AdoptOSObject, T ptr)
+        : m_ptr(ptr)
+    {
+    }
+
     T m_ptr;
 };
 
 template<typename T> inline OSObjectPtr<T> adoptOSObject(T ptr)
 {
-    return OSObjectPtr<T>(AdoptOSObject { }, ptr);
+    return OSObjectPtr<T>(typename OSObjectPtr<T>::AdoptOSObject { }, ptr);
 }
 
 } // namespace WTF
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to