[WK2] API::Array::copy() should move the resulting Vector<> of copies into the Array...
authorzandobersek@gmail.com <zandobersek@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 6 Apr 2015 09:55:07 +0000 (09:55 +0000)
committerzandobersek@gmail.com <zandobersek@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 6 Apr 2015 09:55:07 +0000 (09:55 +0000)
https://bugs.webkit.org/show_bug.cgi?id=143413

Reviewed by Darin Adler.

Move the Vector<> object containing the copied elements into the Array::create()
call, avoiding copying all the elements again.

While here, change the Vector<> parameters for Array::create() and the Array
constructor to rvalue references. This will ensure that the passed-in object
is moved into the Array::create() call if possible, or explicitly copied
otherwise. The constructor is moved into the header for inlining opportunities
and the unnecessary parameter in the create(Vector<>&&) method declaration
removed.

* Shared/API/APIArray.cpp:
(API::Array::create):
(API::Array::copy):
(API::Array::Array): Deleted.
* Shared/API/APIArray.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@182388 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit2/ChangeLog
Source/WebKit2/Shared/API/APIArray.cpp
Source/WebKit2/Shared/API/APIArray.h

index c94cc8d..bf86df6 100644 (file)
@@ -1,5 +1,28 @@
 2015-04-06  Žan Doberšek  <zdobersek@igalia.com>
 
+        [WK2] API::Array::copy() should move the resulting Vector<> of copies into the Array::create() call
+        https://bugs.webkit.org/show_bug.cgi?id=143413
+
+        Reviewed by Darin Adler.
+
+        Move the Vector<> object containing the copied elements into the Array::create()
+        call, avoiding copying all the elements again.
+
+        While here, change the Vector<> parameters for Array::create() and the Array
+        constructor to rvalue references. This will ensure that the passed-in object
+        is moved into the Array::create() call if possible, or explicitly copied
+        otherwise. The constructor is moved into the header for inlining opportunities
+        and the unnecessary parameter in the create(Vector<>&&) method declaration
+        removed.
+
+        * Shared/API/APIArray.cpp:
+        (API::Array::create):
+        (API::Array::copy):
+        (API::Array::Array): Deleted.
+        * Shared/API/APIArray.h:
+
+2015-04-06  Žan Doberšek  <zdobersek@igalia.com>
+
         UserScript, UserStyleSheet constructors should take in Vector<String> rvalues
         https://bugs.webkit.org/show_bug.cgi?id=143411
 
index bcb3ea9..46ef642 100644 (file)
@@ -35,7 +35,7 @@ PassRefPtr<Array> Array::create()
     return create(Vector<RefPtr<Object>>());
 }
 
-PassRefPtr<Array> Array::create(Vector<RefPtr<Object>> elements)
+PassRefPtr<Array> Array::create(Vector<RefPtr<Object>>&& elements)
 {
     return adoptRef(*new Array(WTF::move(elements)));
 }
@@ -75,12 +75,7 @@ Ref<API::Array> Array::copy()
     elements.reserveInitialCapacity(size);
     for (const auto& entry : this->elements())
         elements.uncheckedAppend(entry);
-    return *Array::create(elements);
-}
-
-Array::Array(Vector<RefPtr<Object>> elements)
-    : m_elements(WTF::move(elements))
-{
+    return *Array::create(WTF::move(elements));
 }
 
 Array::~Array()
index 09d44d9..6f00851 100644 (file)
@@ -52,7 +52,7 @@ private:
 
 public:
     static PassRefPtr<Array> create();
-    static PassRefPtr<Array> create(Vector<RefPtr<Object>> elements);
+    static PassRefPtr<Array> create(Vector<RefPtr<Object>>&&);
     static PassRefPtr<Array> createStringArray(const Vector<WTF::String>&);
     Vector<WTF::String> toStringVector();
     Ref<Array> copy();
@@ -85,7 +85,10 @@ public:
 
 
 private:
-    explicit Array(Vector<RefPtr<Object>> elements);
+    explicit Array(Vector<RefPtr<Object>>&& elements)
+        : m_elements(WTF::move(elements))
+    {
+    }
 
     Vector<RefPtr<Object>> m_elements;
 };