OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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_INTERNAL_H_ | 5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_INTERNAL_H_ |
6 #define MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_INTERNAL_H_ | 6 #define MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_INTERNAL_H_ |
7 | 7 |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 #include <new> | 10 #include <new> |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 std::vector<Handle>* handles) {} | 166 std::vector<Handle>* handles) {} |
167 | 167 |
168 static bool ValidateElements(const ArrayHeader* header, | 168 static bool ValidateElements(const ArrayHeader* header, |
169 const ElementType* elements, | 169 const ElementType* elements, |
170 BoundsChecker* bounds_checker, | 170 BoundsChecker* bounds_checker, |
171 const ArrayValidateParams* validate_params) { | 171 const ArrayValidateParams* validate_params) { |
172 MOJO_DCHECK(!validate_params->element_is_nullable) | 172 MOJO_DCHECK(!validate_params->element_is_nullable) |
173 << "Primitive type should be non-nullable"; | 173 << "Primitive type should be non-nullable"; |
174 MOJO_DCHECK(!validate_params->element_validate_params) | 174 MOJO_DCHECK(!validate_params->element_validate_params) |
175 << "Primitive type should not have array validate params"; | 175 << "Primitive type should not have array validate params"; |
| 176 |
| 177 for (uint32_t i = 0; i < header->num_elements; ++i) { |
| 178 if (!ValidateCaller<ElementType>::Run(elements[i])) |
| 179 return false; |
| 180 } |
| 181 |
176 return true; | 182 return true; |
177 } | 183 } |
| 184 |
| 185 private: |
| 186 template <typename U, bool is_enum = IsEnumDataType<U>::value> |
| 187 struct ValidateCaller {}; |
| 188 |
| 189 template <typename U> |
| 190 struct ValidateCaller<U, false> { |
| 191 static bool Run(const ElementType& element) { return true; } |
| 192 }; |
| 193 |
| 194 template <typename U> |
| 195 struct ValidateCaller<U, true> { |
| 196 static bool Run(const ElementType& element) { |
| 197 return ValidateEnum(element); |
| 198 } |
| 199 }; |
178 }; | 200 }; |
179 | 201 |
180 template <> | 202 template <> |
181 struct ArraySerializationHelper<Handle, true> { | 203 struct ArraySerializationHelper<Handle, true> { |
182 typedef ArrayDataTraits<Handle>::StorageType ElementType; | 204 typedef ArrayDataTraits<Handle>::StorageType ElementType; |
183 | 205 |
184 static void EncodePointersAndHandles(const ArrayHeader* header, | 206 static void EncodePointersAndHandles(const ArrayHeader* header, |
185 ElementType* elements, | 207 ElementType* elements, |
186 std::vector<Handle>* handles); | 208 std::vector<Handle>* handles); |
187 | 209 |
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
528 | 550 |
529 template <> | 551 template <> |
530 struct WrapperTraits<String, false> { | 552 struct WrapperTraits<String, false> { |
531 typedef String_Data* DataType; | 553 typedef String_Data* DataType; |
532 }; | 554 }; |
533 | 555 |
534 } // namespace internal | 556 } // namespace internal |
535 } // namespace mojo | 557 } // namespace mojo |
536 | 558 |
537 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_INTERNAL_H_ | 559 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_INTERNAL_H_ |
OLD | NEW |