Loading libs/binder/ndk/include_cpp/android/binder_parcel_utils.h +94 −0 Original line number Diff line number Diff line Loading @@ -542,6 +542,28 @@ binder_status_t AParcel_readStdVectorParcelableElement(const AParcel* parcel, vo return AParcel_readParcelable(parcel, &vector->at(index)); } /** * Writes a parcelable object of type P inside a std::vector<P> at index 'index' to 'parcel'. */ template <typename P> binder_status_t AParcel_writeNullableStdVectorParcelableElement(AParcel* parcel, const void* vectorData, size_t index) { const std::optional<std::vector<P>>* vector = static_cast<const std::optional<std::vector<P>*>>(vectorData); return AParcel_writeNullableParcelable(parcel, vector->at(index)); } /** * Reads a parcelable object of type P inside a std::vector<P> at index 'index' from 'parcel'. */ template <typename P> binder_status_t AParcel_readNullableStdVectorParcelableElement(const AParcel* parcel, void* vectorData, size_t index) { std::optional<std::vector<P>>* vector = static_cast<std::optional<std::vector<P>>*>(vectorData); return AParcel_readNullableParcelable(parcel, &vector->at(index)); } /** * Writes a ScopedFileDescriptor object inside a std::vector<ScopedFileDescriptor> at index 'index' * to 'parcel'. Loading Loading @@ -578,6 +600,54 @@ inline binder_status_t AParcel_readStdVectorParcelableElement<ScopedFileDescript return status; } /** * Writes an SpAIBinder object inside a std::vector<SpAIBinder> at index 'index' * to 'parcel'. */ template <> inline binder_status_t AParcel_writeStdVectorParcelableElement<SpAIBinder>(AParcel* parcel, const void* vectorData, size_t index) { const std::vector<SpAIBinder>* vector = static_cast<const std::vector<SpAIBinder>*>(vectorData); return AParcel_writeRequiredStrongBinder(parcel, vector->at(index)); } /** * Reads an SpAIBinder object inside a std::vector<SpAIBinder> at index 'index' * from 'parcel'. */ template <> inline binder_status_t AParcel_readStdVectorParcelableElement<SpAIBinder>(const AParcel* parcel, void* vectorData, size_t index) { std::vector<SpAIBinder>* vector = static_cast<std::vector<SpAIBinder>*>(vectorData); return AParcel_readRequiredStrongBinder(parcel, &vector->at(index)); } /** * Writes an SpAIBinder object inside a std::optional<std::vector<SpAIBinder>> at index 'index' * to 'parcel'. */ template <> inline binder_status_t AParcel_writeNullableStdVectorParcelableElement<SpAIBinder>( AParcel* parcel, const void* vectorData, size_t index) { const std::optional<std::vector<SpAIBinder>>* vector = static_cast<const std::optional<std::vector<SpAIBinder>>*>(vectorData); return AParcel_writeNullableStrongBinder(parcel, (*vector)->at(index)); } /** * Reads an SpAIBinder object inside a std::optional<std::vector<SpAIBinder>> at index 'index' * from 'parcel'. */ template <> inline binder_status_t AParcel_readNullableStdVectorParcelableElement<SpAIBinder>( const AParcel* parcel, void* vectorData, size_t index) { std::optional<std::vector<SpAIBinder>>* vector = static_cast<std::optional<std::vector<SpAIBinder>>*>(vectorData); return AParcel_readNullableStrongBinder(parcel, &(*vector)->at(index)); } /** * Convenience API for writing a std::vector<P> */ Loading @@ -598,6 +668,30 @@ static inline binder_status_t AParcel_readVector(const AParcel* parcel, std::vec AParcel_readStdVectorParcelableElement<P>); } /** * Convenience API for writing a std::optional<std::vector<P>> */ template <typename P> static inline binder_status_t AParcel_writeVector(AParcel* parcel, const std::optional<std::vector<P>>& vec) { if (!vec) return AParcel_writeInt32(parcel, -1); const void* vectorData = static_cast<const void*>(&vec); return AParcel_writeParcelableArray(parcel, vectorData, static_cast<int32_t>(vec->size()), AParcel_writeNullableStdVectorParcelableElement<P>); } /** * Convenience API for reading a std::optional<std::vector<P>> */ template <typename P> static inline binder_status_t AParcel_readVector(const AParcel* parcel, std::optional<std::vector<P>>* vec) { void* vectorData = static_cast<void*>(vec); return AParcel_readParcelableArray(parcel, vectorData, AParcel_nullableStdVectorExternalAllocator<P>, AParcel_readNullableStdVectorParcelableElement<P>); } // @START /** * Writes a vector of int32_t to the next location in a non-null parcel. Loading Loading
libs/binder/ndk/include_cpp/android/binder_parcel_utils.h +94 −0 Original line number Diff line number Diff line Loading @@ -542,6 +542,28 @@ binder_status_t AParcel_readStdVectorParcelableElement(const AParcel* parcel, vo return AParcel_readParcelable(parcel, &vector->at(index)); } /** * Writes a parcelable object of type P inside a std::vector<P> at index 'index' to 'parcel'. */ template <typename P> binder_status_t AParcel_writeNullableStdVectorParcelableElement(AParcel* parcel, const void* vectorData, size_t index) { const std::optional<std::vector<P>>* vector = static_cast<const std::optional<std::vector<P>*>>(vectorData); return AParcel_writeNullableParcelable(parcel, vector->at(index)); } /** * Reads a parcelable object of type P inside a std::vector<P> at index 'index' from 'parcel'. */ template <typename P> binder_status_t AParcel_readNullableStdVectorParcelableElement(const AParcel* parcel, void* vectorData, size_t index) { std::optional<std::vector<P>>* vector = static_cast<std::optional<std::vector<P>>*>(vectorData); return AParcel_readNullableParcelable(parcel, &vector->at(index)); } /** * Writes a ScopedFileDescriptor object inside a std::vector<ScopedFileDescriptor> at index 'index' * to 'parcel'. Loading Loading @@ -578,6 +600,54 @@ inline binder_status_t AParcel_readStdVectorParcelableElement<ScopedFileDescript return status; } /** * Writes an SpAIBinder object inside a std::vector<SpAIBinder> at index 'index' * to 'parcel'. */ template <> inline binder_status_t AParcel_writeStdVectorParcelableElement<SpAIBinder>(AParcel* parcel, const void* vectorData, size_t index) { const std::vector<SpAIBinder>* vector = static_cast<const std::vector<SpAIBinder>*>(vectorData); return AParcel_writeRequiredStrongBinder(parcel, vector->at(index)); } /** * Reads an SpAIBinder object inside a std::vector<SpAIBinder> at index 'index' * from 'parcel'. */ template <> inline binder_status_t AParcel_readStdVectorParcelableElement<SpAIBinder>(const AParcel* parcel, void* vectorData, size_t index) { std::vector<SpAIBinder>* vector = static_cast<std::vector<SpAIBinder>*>(vectorData); return AParcel_readRequiredStrongBinder(parcel, &vector->at(index)); } /** * Writes an SpAIBinder object inside a std::optional<std::vector<SpAIBinder>> at index 'index' * to 'parcel'. */ template <> inline binder_status_t AParcel_writeNullableStdVectorParcelableElement<SpAIBinder>( AParcel* parcel, const void* vectorData, size_t index) { const std::optional<std::vector<SpAIBinder>>* vector = static_cast<const std::optional<std::vector<SpAIBinder>>*>(vectorData); return AParcel_writeNullableStrongBinder(parcel, (*vector)->at(index)); } /** * Reads an SpAIBinder object inside a std::optional<std::vector<SpAIBinder>> at index 'index' * from 'parcel'. */ template <> inline binder_status_t AParcel_readNullableStdVectorParcelableElement<SpAIBinder>( const AParcel* parcel, void* vectorData, size_t index) { std::optional<std::vector<SpAIBinder>>* vector = static_cast<std::optional<std::vector<SpAIBinder>>*>(vectorData); return AParcel_readNullableStrongBinder(parcel, &(*vector)->at(index)); } /** * Convenience API for writing a std::vector<P> */ Loading @@ -598,6 +668,30 @@ static inline binder_status_t AParcel_readVector(const AParcel* parcel, std::vec AParcel_readStdVectorParcelableElement<P>); } /** * Convenience API for writing a std::optional<std::vector<P>> */ template <typename P> static inline binder_status_t AParcel_writeVector(AParcel* parcel, const std::optional<std::vector<P>>& vec) { if (!vec) return AParcel_writeInt32(parcel, -1); const void* vectorData = static_cast<const void*>(&vec); return AParcel_writeParcelableArray(parcel, vectorData, static_cast<int32_t>(vec->size()), AParcel_writeNullableStdVectorParcelableElement<P>); } /** * Convenience API for reading a std::optional<std::vector<P>> */ template <typename P> static inline binder_status_t AParcel_readVector(const AParcel* parcel, std::optional<std::vector<P>>* vec) { void* vectorData = static_cast<void*>(vec); return AParcel_readParcelableArray(parcel, vectorData, AParcel_nullableStdVectorExternalAllocator<P>, AParcel_readNullableStdVectorParcelableElement<P>); } // @START /** * Writes a vector of int32_t to the next location in a non-null parcel. Loading