SkSTArray move ctor

Change-Id: Ice90a229e1ca5959b365c678e8df332cd6ed4a03
Reviewed-on: https://skia-review.googlesource.com/9489
Reviewed-by: Mike Klein <mtklein@chromium.org>
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
diff --git a/include/private/SkTArray.h b/include/private/SkTArray.h
index 1c06bf3..bd0798c 100644
--- a/include/private/SkTArray.h
+++ b/include/private/SkTArray.h
@@ -403,6 +403,18 @@
     }
 
     /**
+     * Move another array, using preallocated storage if preAllocCount >=
+     * array.count(). Otherwise storage will only be used when array shrinks
+     * to fit.
+     */
+    template <int N>
+    SkTArray(SkTArray&& array, SkAlignedSTStorage<N,T>* storage) {
+        this->init(array.fCount, storage->get(), N);
+        array.move(fMemArray);
+        array.fCount = 0;
+    }
+
+    /**
      * Copy a C array, using preallocated storage if preAllocCount >=
      * count. Otherwise storage will only be used when array shrinks
      * to fit.
@@ -532,10 +544,18 @@
         : INHERITED(array, &fStorage) {
     }
 
+    SkSTArray(SkSTArray&& array)
+        : INHERITED(std::move(array), &fStorage) {
+    }
+
     explicit SkSTArray(const INHERITED& array)
         : INHERITED(array, &fStorage) {
     }
 
+    explicit SkSTArray(INHERITED&& array)
+        : INHERITED(std::move(array), &fStorage) {
+    }
+
     explicit SkSTArray(int reserveCount)
         : INHERITED(reserveCount) {
     }