| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_SERIALIZATION_H_ | 5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_SERIALIZATION_H_ |
| 6 #define MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_SERIALIZATION_H_ | 6 #define MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_SERIALIZATION_H_ |
| 7 | 7 |
| 8 #include <string.h> // For |memcpy()|. | 8 #include <string.h> // For |memcpy()|. |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 MOJO_DCHECK(!validate_params->element_validate_params) | 99 MOJO_DCHECK(!validate_params->element_validate_params) |
| 100 << "Primitive type should not have array validate params"; | 100 << "Primitive type should not have array validate params"; |
| 101 | 101 |
| 102 // TODO(darin): Can this be a memcpy somehow instead of a bit-by-bit copy? | 102 // TODO(darin): Can this be a memcpy somehow instead of a bit-by-bit copy? |
| 103 for (size_t i = 0; i < num_elements; ++i, ++it) | 103 for (size_t i = 0; i < num_elements; ++i, ++it) |
| 104 output->at(i) = *it; | 104 output->at(i) = *it; |
| 105 } | 105 } |
| 106 | 106 |
| 107 static void DeserializeElements(Array_Data<bool>* input, | 107 static void DeserializeElements(Array_Data<bool>* input, |
| 108 Array<bool>* output) { | 108 Array<bool>* output) { |
| 109 Array<bool> result(input->size()); | 109 auto result = Array<bool>::New(input->size()); |
| 110 // TODO(darin): Can this be a memcpy somehow instead of a bit-by-bit copy? | 110 // TODO(darin): Can this be a memcpy somehow instead of a bit-by-bit copy? |
| 111 for (size_t i = 0; i < input->size(); ++i) | 111 for (size_t i = 0; i < input->size(); ++i) |
| 112 result.at(i) = input->at(i); | 112 result.at(i) = input->at(i); |
| 113 output->Swap(&result); | 113 output->Swap(&result); |
| 114 } | 114 } |
| 115 }; | 115 }; |
| 116 | 116 |
| 117 // Serializes and deserializes arrays of handles. | 117 // Serializes and deserializes arrays of handles. |
| 118 template <typename H> | 118 template <typename H> |
| 119 struct ArraySerializer<ScopedHandleBase<H>, H, false> { | 119 struct ArraySerializer<ScopedHandleBase<H>, H, false> { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 137 !validate_params->element_is_nullable && !output->at(i).is_valid(), | 137 !validate_params->element_is_nullable && !output->at(i).is_valid(), |
| 138 VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE, | 138 VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE, |
| 139 MakeMessageWithArrayIndex( | 139 MakeMessageWithArrayIndex( |
| 140 "invalid handle in array expecting valid handles", num_elements, | 140 "invalid handle in array expecting valid handles", num_elements, |
| 141 i)); | 141 i)); |
| 142 } | 142 } |
| 143 } | 143 } |
| 144 | 144 |
| 145 static void DeserializeElements(Array_Data<H>* input, | 145 static void DeserializeElements(Array_Data<H>* input, |
| 146 Array<ScopedHandleBase<H>>* output) { | 146 Array<ScopedHandleBase<H>>* output) { |
| 147 Array<ScopedHandleBase<H>> result(input->size()); | 147 auto result = Array<ScopedHandleBase<H>>::New(input->size()); |
| 148 for (size_t i = 0; i < input->size(); ++i) | 148 for (size_t i = 0; i < input->size(); ++i) |
| 149 result.at(i) = MakeScopedHandle(FetchAndReset(&input->at(i))); | 149 result.at(i) = MakeScopedHandle(FetchAndReset(&input->at(i))); |
| 150 output->Swap(&result); | 150 output->Swap(&result); |
| 151 } | 151 } |
| 152 }; | 152 }; |
| 153 | 153 |
| 154 // This template must only apply to pointer mojo entity (structs, arrays, | 154 // This template must only apply to pointer mojo entity (structs, arrays, |
| 155 // strings). This is done by ensuring that WrapperTraits<S>::DataType is a | 155 // strings). This is done by ensuring that WrapperTraits<S>::DataType is a |
| 156 // pointer. | 156 // pointer. |
| 157 template <typename S> | 157 template <typename S> |
| (...skipping 26 matching lines...) Expand all Loading... |
| 184 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( | 184 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( |
| 185 !validate_params->element_is_nullable && !element, | 185 !validate_params->element_is_nullable && !element, |
| 186 VALIDATION_ERROR_UNEXPECTED_NULL_POINTER, | 186 VALIDATION_ERROR_UNEXPECTED_NULL_POINTER, |
| 187 MakeMessageWithArrayIndex("null in array expecting valid pointers", | 187 MakeMessageWithArrayIndex("null in array expecting valid pointers", |
| 188 num_elements, i)); | 188 num_elements, i)); |
| 189 } | 189 } |
| 190 } | 190 } |
| 191 | 191 |
| 192 static void DeserializeElements(Array_Data<S_Data*>* input, | 192 static void DeserializeElements(Array_Data<S_Data*>* input, |
| 193 Array<S>* output) { | 193 Array<S>* output) { |
| 194 Array<S> result(input->size()); | 194 auto result = Array<S>::New(input->size()); |
| 195 for (size_t i = 0; i < input->size(); ++i) { | 195 for (size_t i = 0; i < input->size(); ++i) { |
| 196 DeserializeCaller::Run(input->at(i), &result[i]); | 196 DeserializeCaller::Run(input->at(i), &result[i]); |
| 197 } | 197 } |
| 198 output->Swap(&result); | 198 output->Swap(&result); |
| 199 } | 199 } |
| 200 | 200 |
| 201 private: | 201 private: |
| 202 // SerializeCaller template is used by |ArraySerializer| to dispatch a | 202 // SerializeCaller template is used by |ArraySerializer| to dispatch a |
| 203 // serialize call on a non-POD type. This template is defined outside | 203 // serialize call on a non-POD type. This template is defined outside |
| 204 // |ArraySerializer| since you cannot specialize a struct within a class | 204 // |ArraySerializer| since you cannot specialize a struct within a class |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 297 SerializeUnion_(it->get(), buf, &result, true); | 297 SerializeUnion_(it->get(), buf, &result, true); |
| 298 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( | 298 MOJO_INTERNAL_DLOG_SERIALIZATION_WARNING( |
| 299 !validate_params->element_is_nullable && output->at(i).is_null(), | 299 !validate_params->element_is_nullable && output->at(i).is_null(), |
| 300 VALIDATION_ERROR_UNEXPECTED_NULL_POINTER, | 300 VALIDATION_ERROR_UNEXPECTED_NULL_POINTER, |
| 301 MakeMessageWithArrayIndex("null in array expecting valid unions", | 301 MakeMessageWithArrayIndex("null in array expecting valid unions", |
| 302 num_elements, i)); | 302 num_elements, i)); |
| 303 } | 303 } |
| 304 } | 304 } |
| 305 | 305 |
| 306 static void DeserializeElements(Array_Data<U_Data>* input, Array<U>* output) { | 306 static void DeserializeElements(Array_Data<U_Data>* input, Array<U>* output) { |
| 307 Array<U> result(input->size()); | 307 auto result = Array<U>::New(input->size()); |
| 308 for (size_t i = 0; i < input->size(); ++i) { | 308 for (size_t i = 0; i < input->size(); ++i) { |
| 309 auto& elem = input->at(i); | 309 auto& elem = input->at(i); |
| 310 if (!elem.is_null()) { | 310 if (!elem.is_null()) { |
| 311 using UnwrapedUnionType = typename RemoveStructPtr<U>::type; | 311 using UnwrapedUnionType = typename RemoveStructPtr<U>::type; |
| 312 result[i] = UnwrapedUnionType::New(); | 312 result[i] = UnwrapedUnionType::New(); |
| 313 Deserialize_(&elem, result[i].get()); | 313 Deserialize_(&elem, result[i].get()); |
| 314 } | 314 } |
| 315 } | 315 } |
| 316 output->Swap(&result); | 316 output->Swap(&result); |
| 317 } | 317 } |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 360 if (input) { | 360 if (input) { |
| 361 internal::ArraySerializer<E, F>::DeserializeElements(input, output); | 361 internal::ArraySerializer<E, F>::DeserializeElements(input, output); |
| 362 } else { | 362 } else { |
| 363 output->reset(); | 363 output->reset(); |
| 364 } | 364 } |
| 365 } | 365 } |
| 366 | 366 |
| 367 } // namespace mojo | 367 } // namespace mojo |
| 368 | 368 |
| 369 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_SERIALIZATION_H_ | 369 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_SERIALIZATION_H_ |
| OLD | NEW |