| 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 | 9 |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 56 } | 56 } |
| 57 template <bool element_is_nullable, typename ElementValidateParams> | 57 template <bool element_is_nullable, typename ElementValidateParams> |
| 58 static void SerializeElements(Array<E> input, | 58 static void SerializeElements(Array<E> input, |
| 59 Buffer* buf, | 59 Buffer* buf, |
| 60 Array_Data<F>* output) { | 60 Array_Data<F>* output) { |
| 61 static_assert(!element_is_nullable, | 61 static_assert(!element_is_nullable, |
| 62 "Primitive type should be non-nullable"); | 62 "Primitive type should be non-nullable"); |
| 63 static_assert((IsSame<ElementValidateParams, NoValidateParams>::value), | 63 static_assert((IsSame<ElementValidateParams, NoValidateParams>::value), |
| 64 "Primitive type should not have array validate params"); | 64 "Primitive type should not have array validate params"); |
| 65 | 65 |
| 66 memcpy(output->storage(), &input.storage()[0], input.size() * sizeof(E)); | 66 if (input.size()) |
| 67 memcpy(output->storage(), &input.storage()[0], input.size() * sizeof(E)); |
| 67 } | 68 } |
| 68 static void DeserializeElements(Array_Data<F>* input, Array<E>* output) { | 69 static void DeserializeElements(Array_Data<F>* input, Array<E>* output) { |
| 69 std::vector<E> result(input->size()); | 70 std::vector<E> result(input->size()); |
| 70 memcpy(&result[0], input->storage(), input->size() * sizeof(E)); | 71 if (input->size()) |
| 72 memcpy(&result[0], input->storage(), input->size() * sizeof(E)); |
| 71 output->Swap(&result); | 73 output->Swap(&result); |
| 72 } | 74 } |
| 73 }; | 75 }; |
| 74 | 76 |
| 75 template <> | 77 template <> |
| 76 struct ArraySerializer<bool, bool, false> { | 78 struct ArraySerializer<bool, bool, false> { |
| 77 static size_t GetSerializedSize(const Array<bool>& input) { | 79 static size_t GetSerializedSize(const Array<bool>& input) { |
| 78 return sizeof(Array_Data<bool>) + Align((input.size() + 7) / 8); | 80 return sizeof(Array_Data<bool>) + Align((input.size() + 7) / 8); |
| 79 } | 81 } |
| 80 template <bool element_is_nullable, typename ElementValidateParams> | 82 template <bool element_is_nullable, typename ElementValidateParams> |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 290 if (input) { | 292 if (input) { |
| 291 internal::ArraySerializer<E, F>::DeserializeElements(input, output); | 293 internal::ArraySerializer<E, F>::DeserializeElements(input, output); |
| 292 } else { | 294 } else { |
| 293 output->reset(); | 295 output->reset(); |
| 294 } | 296 } |
| 295 } | 297 } |
| 296 | 298 |
| 297 } // namespace mojo | 299 } // namespace mojo |
| 298 | 300 |
| 299 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_SERIALIZATION_H_ | 301 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_SERIALIZATION_H_ |
| OLD | NEW |