Refine HidlMemory

Add construct from a const hidl_memory& so that we can easily
copy it out of a synchronous callback

Bug: 67758915
Test: hidl_test
Change-Id: I0e10cc4c9321197787657f957ea184a5e7262744
diff --git a/base/HidlSupport.cpp b/base/HidlSupport.cpp
index aec3fed..8f3c057 100644
--- a/base/HidlSupport.cpp
+++ b/base/HidlSupport.cpp
@@ -273,9 +273,15 @@
     return mSize == 0;
 }
 
+sp<HidlMemory> HidlMemory::getInstance(const hidl_memory& mem) {
+    sp<HidlMemory> instance = new HidlMemory();
+    instance->hidl_memory::operator=(mem);
+    return instance;
+}
+
 sp<HidlMemory> HidlMemory::getInstance(hidl_memory&& mem) {
     sp<HidlMemory> instance = new HidlMemory();
-    *instance = std::move(mem);
+    instance->hidl_memory::operator=(std::move(mem));
     return instance;
 }
 
@@ -295,6 +301,11 @@
     return instance;
 }
 
+HidlMemory::HidlMemory() : hidl_memory() {}
+
+HidlMemory::HidlMemory(const hidl_string& name, hidl_handle&& handle, size_t size)
+        : hidl_memory(name, std::move(handle), size) {}
+
 // it's required to have at least one out-of-line method to avoid weak vtable
 HidlMemory::~HidlMemory() {
     hidl_memory::~hidl_memory();