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