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