diff options
| -rw-r--r-- | libs/binder/include/binder/Parcel.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/libs/binder/include/binder/Parcel.h b/libs/binder/include/binder/Parcel.h index ece25a0730..4b2d50df86 100644 --- a/libs/binder/include/binder/Parcel.h +++ b/libs/binder/include/binder/Parcel.h @@ -210,6 +210,8 @@ public: template<typename T> status_t writeParcelableVector(const std::shared_ptr<std::vector<std::unique_ptr<T>>>& val); template<typename T> + status_t writeParcelableVector(const std::shared_ptr<std::vector<std::optional<T>>>& val); + template<typename T> status_t writeParcelableVector(const std::vector<T>& val); template<typename T> @@ -1229,6 +1231,16 @@ status_t Parcel::writeParcelableVector(const std::shared_ptr<std::vector<std::un return unsafeWriteTypedVector<NullableT, const NullableT&>(*val, &Parcel::writeNullableParcelable); } +template<typename T> +status_t Parcel::writeParcelableVector(const std::shared_ptr<std::vector<std::optional<T>>>& val) { + if (val.get() == nullptr) { + return this->writeInt32(-1); + } + + using NullableT = std::optional<T>; + return unsafeWriteTypedVector<NullableT, const NullableT&>(*val, &Parcel::writeNullableParcelable); +} + template<typename T, std::enable_if_t<std::is_same_v<typename std::underlying_type_t<T>,int32_t>, bool>> status_t Parcel::writeEnum(const T& val) { return writeInt32(static_cast<int32_t>(val)); |