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.
*/