| Index: mojo/public/cpp/bindings/lib/array_serialization.h
|
| diff --git a/mojo/public/cpp/bindings/lib/array_serialization.h b/mojo/public/cpp/bindings/lib/array_serialization.h
|
| index 41532388ac212a531c0a840eb6a544dcf3eb3fa8..e73553d89b39a6f2ba4142cd6e83ffec769a3acb 100644
|
| --- a/mojo/public/cpp/bindings/lib/array_serialization.h
|
| +++ b/mojo/public/cpp/bindings/lib/array_serialization.h
|
| @@ -132,12 +132,20 @@ struct ArraySerializer<ScopedHandleBase<H>, H, true> {
|
| }
|
| };
|
|
|
| +// This template must only apply to pointer mojo entity (structs and arrays).
|
| +// This is done by ensuring that WrapperTraits<S>::DataType is a pointer.
|
| template <typename S>
|
| -struct ArraySerializer<S, typename S::Data_*, true> {
|
| +struct ArraySerializer<S,
|
| + typename internal::EnableIf<
|
| + internal::IsPointer<typename internal::WrapperTraits<
|
| + S>::DataType>::value,
|
| + typename internal::WrapperTraits<S>::DataType>::type,
|
| + true> {
|
| + typedef typename internal::RemovePointer<
|
| + typename internal::WrapperTraits<S>::DataType>::type S_Data;
|
| static size_t GetSerializedSize(const Array<S>& input) {
|
| - size_t size =
|
| - sizeof(Array_Data<typename S::Data_*>) +
|
| - input.size() * sizeof(internal::StructPointer<typename S::Data_>);
|
| + size_t size = sizeof(Array_Data<S_Data*>) +
|
| + input.size() * sizeof(internal::StructPointer<S_Data>);
|
| for (size_t i = 0; i < input.size(); ++i)
|
| size += GetSerializedSize_(input[i]);
|
| return size;
|
| @@ -145,9 +153,9 @@ struct ArraySerializer<S, typename S::Data_*, true> {
|
| template <bool element_is_nullable, typename ElementValidateParams>
|
| static void SerializeElements(Array<S> input,
|
| Buffer* buf,
|
| - Array_Data<typename S::Data_*>* output) {
|
| + Array_Data<S_Data*>* output) {
|
| for (size_t i = 0; i < input.size(); ++i) {
|
| - typename S::Data_* element;
|
| + S_Data* element;
|
| SerializeCaller<S, ElementValidateParams>::Run(
|
| input[i].Pass(), buf, &element);
|
| output->at(i) = element;
|
| @@ -158,7 +166,7 @@ struct ArraySerializer<S, typename S::Data_*, true> {
|
| "null in array expecting valid pointers", input.size(), i));
|
| }
|
| }
|
| - static void DeserializeElements(Array_Data<typename S::Data_*>* input,
|
| + static void DeserializeElements(Array_Data<S_Data*>* input,
|
| Array<S>* output) {
|
| Array<S> result(input->size());
|
| for (size_t i = 0; i < input->size(); ++i) {
|
| @@ -172,7 +180,9 @@ struct ArraySerializer<S, typename S::Data_*, true> {
|
| private:
|
| template <typename T, typename Params>
|
| struct SerializeCaller {
|
| - static void Run(T input, Buffer* buf, typename T::Data_** output) {
|
| + static void Run(T input,
|
| + Buffer* buf,
|
| + typename internal::WrapperTraits<T>::DataType* output) {
|
| static_assert((IsSame<Params, NoValidateParams>::value),
|
| "Struct type should not have array validate params");
|
|
|
|
|