Title: [154519] trunk/Source/WTF
Revision
154519
Author
[email protected]
Date
2013-08-23 13:43:13 -0700 (Fri, 23 Aug 2013)

Log Message

Cut down repeated code in RefPtr and RetainPtr by using copy/move-and-swap for assignment operators
https://bugs.webkit.org/show_bug.cgi?id=120223

Reviewed by Anders Carlsson.

* wtf/RefPtr.h: Switch to copy-and-swap in the assignment operators. The move ones already were done
that way.
* wtf/RetainPtr.h: Ditto, except for the move ones too.

Modified Paths

Diff

Modified: trunk/Source/WTF/ChangeLog (154518 => 154519)


--- trunk/Source/WTF/ChangeLog	2013-08-23 20:40:34 UTC (rev 154518)
+++ trunk/Source/WTF/ChangeLog	2013-08-23 20:43:13 UTC (rev 154519)
@@ -1,3 +1,14 @@
+2013-08-23  Darin Adler  <[email protected]>
+
+        Cut down repeated code in RefPtr and RetainPtr by using copy/move-and-swap for assignment operators
+        https://bugs.webkit.org/show_bug.cgi?id=120223
+
+        Reviewed by Anders Carlsson.
+
+        * wtf/RefPtr.h: Switch to copy-and-swap in the assignment operators. The move ones already were done
+        that way.
+        * wtf/RetainPtr.h: Ditto, except for the move ones too.
+
 2013-08-23  Oliver Hunt  <[email protected]>
 
         Add more validation logic to CompressibleVector

Modified: trunk/Source/WTF/wtf/RefPtr.h (154518 => 154519)


--- trunk/Source/WTF/wtf/RefPtr.h	2013-08-23 20:40:34 UTC (rev 154518)
+++ trunk/Source/WTF/wtf/RefPtr.h	2013-08-23 20:43:13 UTC (rev 154519)
@@ -1,5 +1,5 @@
 /*
- *  Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
+ *  Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2013 Apple Inc. All rights reserved.
  *
  *  This library is free software; you can redistribute it and/or
  *  modify it under the terms of the GNU Library General Public
@@ -107,66 +107,60 @@
         derefIfNotNull(ptr);
     }
 
-    template<typename T> inline RefPtr<T>& RefPtr<T>::operator=(const RefPtr<T>& o)
+    template<typename T> inline RefPtr<T>& RefPtr<T>::operator=(const RefPtr& o)
     {
-        T* optr = o.get();
-        refIfNotNull(optr);
-        T* ptr = m_ptr;
-        m_ptr = optr;
-        derefIfNotNull(ptr);
+        RefPtr ptr = o;
+        swap(ptr);
         return *this;
     }
     
     template<typename T> template<typename U> inline RefPtr<T>& RefPtr<T>::operator=(const RefPtr<U>& o)
     {
-        T* optr = o.get();
-        refIfNotNull(optr);
-        T* ptr = m_ptr;
-        m_ptr = optr;
-        derefIfNotNull(ptr);
+        RefPtr ptr = o;
+        swap(ptr);
         return *this;
     }
     
     template<typename T> inline RefPtr<T>& RefPtr<T>::operator=(T* optr)
     {
-        refIfNotNull(optr);
-        T* ptr = m_ptr;
-        m_ptr = optr;
-        derefIfNotNull(ptr);
+        RefPtr ptr = optr;
+        swap(ptr);
         return *this;
     }
 
     template<typename T> inline RefPtr<T>& RefPtr<T>::operator=(const PassRefPtr<T>& o)
     {
-        T* ptr = m_ptr;
-        m_ptr = o.leakRef();
-        derefIfNotNull(ptr);
+        RefPtr ptr = o;
+        swap(ptr);
         return *this;
     }
 
     template<typename T> template<typename U> inline RefPtr<T>& RefPtr<T>::operator=(const PassRefPtr<U>& o)
     {
-        T* ptr = m_ptr;
-        m_ptr = o.leakRef();
-        derefIfNotNull(ptr);
+        RefPtr ptr = o;
+        swap(ptr);
         return *this;
     }
+
 #if COMPILER_SUPPORTS(CXX_RVALUE_REFERENCES)
-    template<typename T> inline RefPtr<T>& RefPtr<T>::operator=(RefPtr<T>&& o)
+
+    template<typename T> inline RefPtr<T>& RefPtr<T>::operator=(RefPtr&& o)
     {
-        RefPtr<T> ptr = std::move(o);
+        RefPtr ptr = std::move(o);
         swap(ptr);
         return *this;
     }
 
     template<typename T> template<typename U> inline RefPtr<T>& RefPtr<T>::operator=(RefPtr<U>&& o)
     {
-        RefPtr<T> ptr = std::move(o);
+        RefPtr ptr = std::move(o);
         swap(ptr);
         return *this;
     }
+
 #endif
-    template<class T> inline void RefPtr<T>::swap(RefPtr<T>& o)
+
+    template<class T> inline void RefPtr<T>::swap(RefPtr& o)
     {
         std::swap(m_ptr, o.m_ptr);
     }

Modified: trunk/Source/WTF/wtf/RetainPtr.h (154518 => 154519)


--- trunk/Source/WTF/wtf/RetainPtr.h	2013-08-23 20:40:34 UTC (rev 154518)
+++ trunk/Source/WTF/wtf/RetainPtr.h	2013-08-23 20:43:13 UTC (rev 154519)
@@ -1,5 +1,5 @@
 /*
- *  Copyright (C) 2005, 2006, 2007, 2008, 2010 Apple Inc. All rights reserved.
+ *  Copyright (C) 2005, 2006, 2007, 2008, 2010, 2013 Apple Inc. All rights reserved.
  *
  *  This library is free software; you can redistribute it and/or
  *  modify it under the terms of the GNU Library General Public
@@ -186,74 +186,53 @@
         return ptr;
     }
 
-    template<typename T> inline RetainPtr<T>& RetainPtr<T>::operator=(const RetainPtr<T>& o)
+    template<typename T> inline RetainPtr<T>& RetainPtr<T>::operator=(const RetainPtr& o)
     {
-        PtrType optr = o.get();
-        if (optr)
-            retain(optr);
-        PtrType ptr = m_ptr;
-        m_ptr = optr;
-        if (ptr)
-            release(ptr);
+        RetainPtr ptr = o;
+        swap(ptr);
         return *this;
     }
 
     template<typename T> template<typename U> inline RetainPtr<T>& RetainPtr<T>::operator=(const RetainPtr<U>& o)
     {
-        PtrType optr = o.get();
-        if (optr)
-            retain(optr);
-        PtrType ptr = m_ptr;
-        m_ptr = optr;
-        if (ptr)
-            release(ptr);
+        RetainPtr ptr = o;
+        swap(ptr);
         return *this;
     }
 
     template<typename T> inline RetainPtr<T>& RetainPtr<T>::operator=(PtrType optr)
     {
-        if (optr)
-            retain(optr);
-        PtrType ptr = m_ptr;
-        m_ptr = optr;
-        if (ptr)
-            release(ptr);
+        RetainPtr ptr = optr;
+        swap(ptr);
         return *this;
     }
 
     template<typename T> template<typename U> inline RetainPtr<T>& RetainPtr<T>::operator=(U* optr)
     {
-        if (optr)
-            retain(optr);
-        PtrType ptr = m_ptr;
-        m_ptr = optr;
-        if (ptr)
-            release(ptr);
+        RetainPtr ptr = optr;
+        swap(ptr);
         return *this;
     }
 
 #if COMPILER_SUPPORTS(CXX_RVALUE_REFERENCES)
-    template<typename T> inline RetainPtr<T>& RetainPtr<T>::operator=(RetainPtr<T>&& o)
-    {
-        PtrType ptr = m_ptr;
-        m_ptr = o.leakRef();
-        if (ptr)
-            release(ptr);
 
+    template<typename T> inline RetainPtr<T>& RetainPtr<T>::operator=(RetainPtr&& o)
+    {
+        RetainPtr ptr = std::move(o);
+        swap(ptr);
         return *this;
     }
 
     template<typename T> template<typename U> inline RetainPtr<T>& RetainPtr<T>::operator=(RetainPtr<U>&& o)
     {
-        PtrType ptr = m_ptr;
-        m_ptr = o.leakRef();
-        if (ptr)
-            release(ptr);
+        RetainPtr ptr = std::move(o);
+        swap(ptr);
         return *this;
     }
+
 #endif
 
-    template<typename T> inline void RetainPtr<T>::swap(RetainPtr<T>& o)
+    template<typename T> inline void RetainPtr<T>::swap(RetainPtr& o)
     {
         std::swap(m_ptr, o.m_ptr);
     }
@@ -269,15 +248,15 @@
     }
 
     template<typename T, typename U> inline bool operator==(const RetainPtr<T>& a, U* b)
-    { 
+    {
         return a.get() == b; 
     }
-    
+
     template<typename T, typename U> inline bool operator==(T* a, const RetainPtr<U>& b) 
     {
         return a == b.get(); 
     }
-    
+
     template<typename T, typename U> inline bool operator!=(const RetainPtr<T>& a, const RetainPtr<U>& b)
     { 
         return a.get() != b.get(); 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to