| 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 4407de850d676ec73d9d76286846141968a71750..af37d9c914dc5d5f1eeefe6c555062376ddf8150 100644
|
| --- a/mojo/public/cpp/bindings/lib/array_serialization.h
|
| +++ b/mojo/public/cpp/bindings/lib/array_serialization.h
|
| @@ -118,10 +118,20 @@ template <typename H> struct ArraySerializer<ScopedHandleBase<H>, H, true> {
|
| }
|
| };
|
|
|
| -template <typename S> struct ArraySerializer<S, typename S::Data_*, true> {
|
| +template <typename S>
|
| +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;
|
| @@ -129,9 +139,9 @@ template <typename S> 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;
|
| @@ -143,7 +153,7 @@ template <typename S> struct ArraySerializer<S, typename S::Data_*, true> {
|
| }
|
| }
|
| static void DeserializeElements(
|
| - Array_Data<typename S::Data_*>* input, Array<S>* output) {
|
| + Array_Data<S_Data*>* input, Array<S>* output) {
|
| Array<S> result(input->size());
|
| for (size_t i = 0; i < input->size(); ++i) {
|
| S element;
|
| @@ -156,7 +166,10 @@ template <typename S> 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) {
|
| MOJO_COMPILE_ASSERT((IsSame<Params, NoValidateParams>::value),
|
| Struct_type_should_not_have_array_validate_params);
|
|
|
|
|