hidl_vec: move elements on resize

To avoid extra copies. Doing this also requires adding move
constructors and move assignment operators to hidl_array.

Bug: 135207394
Test: libhidl_test
Test: hidl_test
Test: reduces image size on aosp_walleye
$ cat installed-files-before.txt | awk '{s+=$1}END{print s}'
1135438223
$ cat installed-files-after.txt | awk '{s+=$1}END{print s}'
1135434327

Change-Id: I231f5c9cc959b605e6f102ff7217f338c95d5d5e
diff --git a/base/include/hidl/HidlSupport.h b/base/include/hidl/HidlSupport.h
index 79dd992..44691e6 100644
--- a/base/include/hidl/HidlSupport.h
+++ b/base/include/hidl/HidlSupport.h
@@ -508,7 +508,7 @@
         T *newBuffer = new T[size];
 
         for (size_t i = 0; i < std::min(static_cast<uint32_t>(size), mSize); ++i) {
-            newBuffer[i] = mBuffer[i];
+            newBuffer[i] = std::move(mBuffer[i]);
         }
 
         if (mOwnsBuffer) {
@@ -729,6 +729,8 @@
     using std_array_type = typename details::std_array<T, SIZE1, SIZES...>::type;
 
     hidl_array() = default;
+    hidl_array(const hidl_array&) noexcept = default;
+    hidl_array(hidl_array&&) noexcept = default;
 
     // Copies the data from source, using T::operator=(const T &).
     hidl_array(const T *source) {
@@ -743,6 +745,9 @@
         modifier = array;
     }
 
+    hidl_array& operator=(const hidl_array&) noexcept = default;
+    hidl_array& operator=(hidl_array&&) noexcept = default;
+
     T *data() { return mBuffer; }
     const T *data() const { return mBuffer; }
 
@@ -795,6 +800,8 @@
     using std_array_type = typename details::std_array<T, SIZE1>::type;
 
     hidl_array() = default;
+    hidl_array(const hidl_array&) noexcept = default;
+    hidl_array(hidl_array&&) noexcept = default;
 
     // Copies the data from source, using T::operator=(const T &).
     hidl_array(const T *source) {
@@ -806,6 +813,9 @@
     // Copies the data from the given std::array, using T::operator=(const T &).
     hidl_array(const std_array_type &array) : hidl_array(array.data()) {}
 
+    hidl_array& operator=(const hidl_array&) noexcept = default;
+    hidl_array& operator=(hidl_array&&) noexcept = default;
+
     T *data() { return mBuffer; }
     const T *data() const { return mBuffer; }