Add templatization to MQDescriptor

Test: FMQ unit tests
Bug: 33948735

Merged-In: I50a97e4c1278fc9bdcb1bf4d524d33fd9761dec2
Change-Id: I50a97e4c1278fc9bdcb1bf4d524d33fd9761dec2
diff --git a/base/include/hidl/MQDescriptor.h b/base/include/hidl/MQDescriptor.h
index 8043761..ed9279a 100644
--- a/base/include/hidl/MQDescriptor.h
+++ b/base/include/hidl/MQDescriptor.h
@@ -49,7 +49,7 @@
   kUnsynchronizedWrite = 0x02
 };
 
-template <MQFlavor flavor>
+template <typename T, MQFlavor flavor>
 struct MQDescriptor {
     MQDescriptor(
             const std::vector<GrantorDescriptor>& grantors,
@@ -114,26 +114,28 @@
     uint32_t mFlags;
 };
 
-template<MQFlavor flavor>
-const size_t MQDescriptor<flavor>::kOffsetOfGrantors = offsetof(MQDescriptor<flavor>, mGrantors);
+template<typename T, MQFlavor flavor>
+const size_t MQDescriptor<T, flavor>::kOffsetOfGrantors = offsetof(MQDescriptor, mGrantors);
 
-template<MQFlavor flavor>
-const size_t MQDescriptor<flavor>::kOffsetOfHandle = offsetof(MQDescriptor<flavor>, mHandle);
+template<typename T, MQFlavor flavor>
+const size_t MQDescriptor<T, flavor>::kOffsetOfHandle = offsetof(MQDescriptor, mHandle);
 
 /*
  * MQDescriptorSync will describe the wait-free synchronized
  * flavor of FMQ.
  */
-using MQDescriptorSync = MQDescriptor<kSynchronizedReadWrite>;
+template<typename T>
+using MQDescriptorSync = MQDescriptor<T, kSynchronizedReadWrite>;
 
 /*
  * MQDescriptorUnsync will describe the unsynchronized write
  * flavor of FMQ.
  */
-using MQDescriptorUnsync = MQDescriptor<kUnsynchronizedWrite>;
+template<typename T>
+using MQDescriptorUnsync = MQDescriptor<T, kUnsynchronizedWrite>;
 
-template<MQFlavor flavor>
-MQDescriptor<flavor>::MQDescriptor(
+template<typename T, MQFlavor flavor>
+MQDescriptor<T, flavor>::MQDescriptor(
         const std::vector<GrantorDescriptor>& grantors,
         native_handle_t* nhandle,
         size_t size)
@@ -146,8 +148,8 @@
     }
 }
 
-template<MQFlavor flavor>
-MQDescriptor<flavor>::MQDescriptor(size_t bufferSize, native_handle_t *nHandle,
+template<typename T, MQFlavor flavor>
+MQDescriptor<T, flavor>::MQDescriptor(size_t bufferSize, native_handle_t *nHandle,
                                    size_t messageSize, bool configureEventFlag)
     : mHandle(nHandle), mQuantum(messageSize), mFlags(flavor) {
     /*
@@ -180,8 +182,8 @@
     }
 }
 
-template<MQFlavor flavor>
-MQDescriptor<flavor>::MQDescriptor(const MQDescriptor<flavor> &other)
+template<typename T, MQFlavor flavor>
+MQDescriptor<T, flavor>::MQDescriptor(const MQDescriptor<T, flavor> &other)
     : mGrantors(other.mGrantors),
       mHandle(nullptr),
       mQuantum(other.mQuantum),
@@ -200,33 +202,33 @@
     }
 }
 
-template<MQFlavor flavor>
-MQDescriptor<flavor>::MQDescriptor() : MQDescriptor(
+template<typename T, MQFlavor flavor>
+MQDescriptor<T, flavor>::MQDescriptor() : MQDescriptor(
         std::vector<android::hardware::GrantorDescriptor>(),
         nullptr /* nHandle */,
         0 /* size */) {}
 
-template<MQFlavor flavor>
-MQDescriptor<flavor>::~MQDescriptor() {
+template<typename T, MQFlavor flavor>
+MQDescriptor<T, flavor>::~MQDescriptor() {
     if (mHandle != nullptr) {
         native_handle_close(mHandle);
         native_handle_delete(mHandle);
     }
 }
 
-template<MQFlavor flavor>
-size_t MQDescriptor<flavor>::getSize() const {
+template<typename T, MQFlavor flavor>
+size_t MQDescriptor<T, flavor>::getSize() const {
   return mGrantors[DATAPTRPOS].extent;
 }
 
-template<MQFlavor flavor>
-size_t MQDescriptor<flavor>::getQuantum() const { return mQuantum; }
+template<typename T, MQFlavor flavor>
+size_t MQDescriptor<T, flavor>::getQuantum() const { return mQuantum; }
 
-template<MQFlavor flavor>
-int32_t MQDescriptor<flavor>::getFlags() const { return mFlags; }
+template<typename T, MQFlavor flavor>
+int32_t MQDescriptor<T, flavor>::getFlags() const { return mFlags; }
 
-template<MQFlavor flavor>
-std::vector<GrantorDescriptor> MQDescriptor<flavor>::getGrantors() const {
+template<typename T, MQFlavor flavor>
+std::vector<GrantorDescriptor> MQDescriptor<T, flavor>::getGrantors() const {
   size_t grantor_count = mGrantors.size();
   std::vector<GrantorDescriptor> grantors(grantor_count);
   for (size_t i = 0; i < grantor_count; i++) {
@@ -235,8 +237,8 @@
   return grantors;
 }
 
-template<MQFlavor flavor>
-const sp<NativeHandle> MQDescriptor<flavor>::getNativeHandle() const {
+template<typename T, MQFlavor flavor>
+const sp<NativeHandle> MQDescriptor<T, flavor>::getNativeHandle() const {
   /*
    * Create an sp<NativeHandle> from mHandle.
    */
diff --git a/transport/include/hidl/HidlBinderSupport.h b/transport/include/hidl/HidlBinderSupport.h
index 08989e2..cad68be 100644
--- a/transport/include/hidl/HidlBinderSupport.h
+++ b/transport/include/hidl/HidlBinderSupport.h
@@ -125,9 +125,9 @@
 
 // ---------------------- MQDescriptor
 
-template<MQFlavor flavor>
+template<typename T, MQFlavor flavor>
 ::android::status_t readEmbeddedFromParcel(
-        MQDescriptor<flavor> *obj,
+        MQDescriptor<T, flavor> *obj,
         const ::android::hardware::Parcel &parcel,
         size_t parentHandle,
         size_t parentOffset) {
@@ -139,14 +139,14 @@
                 &obj->grantors(),
                 parcel,
                 parentHandle,
-                parentOffset + MQDescriptor<flavor>::kOffsetOfGrantors,
+                parentOffset + MQDescriptor<T, flavor>::kOffsetOfGrantors,
                 &_hidl_grantors_child);
 
     if (_hidl_err != ::android::OK) { return _hidl_err; }
 
     const native_handle_t *_hidl_mq_handle_ptr = parcel.readEmbeddedNativeHandle(
             parentHandle,
-            parentOffset + MQDescriptor<flavor>::kOffsetOfHandle);
+            parentOffset + MQDescriptor<T, flavor>::kOffsetOfHandle);
 
     if (_hidl_mq_handle_ptr == nullptr) {
         _hidl_err = ::android::UNKNOWN_ERROR;
@@ -156,9 +156,9 @@
     return _hidl_err;
 }
 
-template<MQFlavor flavor>
+template<typename T, MQFlavor flavor>
 ::android::status_t writeEmbeddedToParcel(
-        const MQDescriptor<flavor> &obj,
+        const MQDescriptor<T, flavor> &obj,
         ::android::hardware::Parcel *parcel,
         size_t parentHandle,
         size_t parentOffset) {
@@ -170,7 +170,7 @@
             obj.grantors(),
             parcel,
             parentHandle,
-            parentOffset + MQDescriptor<flavor>::kOffsetOfGrantors,
+            parentOffset + MQDescriptor<T, flavor>::kOffsetOfGrantors,
             &_hidl_grantors_child);
 
     if (_hidl_err != ::android::OK) { return _hidl_err; }
@@ -178,7 +178,7 @@
     _hidl_err = parcel->writeEmbeddedNativeHandle(
             obj.handle(),
             parentHandle,
-            parentOffset + MQDescriptor<flavor>::kOffsetOfHandle);
+            parentOffset + MQDescriptor<T, flavor>::kOffsetOfHandle);
 
     if (_hidl_err != ::android::OK) { return _hidl_err; }