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 <new> | 8 #include <new> |
| 9 #include <utility> |
9 #include <vector> | 10 #include <vector> |
10 | 11 |
11 #include "mojo/public/c/system/macros.h" | 12 #include "mojo/public/c/system/macros.h" |
12 #include "mojo/public/cpp/bindings/lib/bindings_internal.h" | 13 #include "mojo/public/cpp/bindings/lib/bindings_internal.h" |
13 #include "mojo/public/cpp/bindings/lib/bindings_serialization.h" | 14 #include "mojo/public/cpp/bindings/lib/bindings_serialization.h" |
14 #include "mojo/public/cpp/bindings/lib/bounds_checker.h" | 15 #include "mojo/public/cpp/bindings/lib/bounds_checker.h" |
15 #include "mojo/public/cpp/bindings/lib/buffer.h" | 16 #include "mojo/public/cpp/bindings/lib/buffer.h" |
16 #include "mojo/public/cpp/bindings/lib/map_data_internal.h" | 17 #include "mojo/public/cpp/bindings/lib/map_data_internal.h" |
17 #include "mojo/public/cpp/bindings/lib/template_util.h" | 18 #include "mojo/public/cpp/bindings/lib/template_util.h" |
18 #include "mojo/public/cpp/bindings/lib/validate_params.h" | 19 #include "mojo/public/cpp/bindings/lib/validate_params.h" |
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
495 size_t old_size = vec->size(); | 496 size_t old_size = vec->size(); |
496 for (size_t i = size; i < old_size; i++) | 497 for (size_t i = size; i < old_size; i++) |
497 reinterpret_cast<T*>(vec->at(i).buf)->~T(); | 498 reinterpret_cast<T*>(vec->at(i).buf)->~T(); |
498 ResizeStorage(vec, size); | 499 ResizeStorage(vec, size); |
499 for (size_t i = old_size; i < vec->size(); i++) | 500 for (size_t i = old_size; i < vec->size(); i++) |
500 new (vec->at(i).buf) T(); | 501 new (vec->at(i).buf) T(); |
501 } | 502 } |
502 static inline void PushBack(std::vector<StorageType>* vec, RefType value) { | 503 static inline void PushBack(std::vector<StorageType>* vec, RefType value) { |
503 size_t old_size = vec->size(); | 504 size_t old_size = vec->size(); |
504 ResizeStorage(vec, old_size + 1); | 505 ResizeStorage(vec, old_size + 1); |
505 new (vec->at(old_size).buf) T(value.Pass()); | 506 new (vec->at(old_size).buf) T(std::move(value)); |
506 } | 507 } |
507 static inline void ResizeStorage(std::vector<StorageType>* vec, size_t size) { | 508 static inline void ResizeStorage(std::vector<StorageType>* vec, size_t size) { |
508 if (size <= vec->capacity()) { | 509 if (size <= vec->capacity()) { |
509 vec->resize(size); | 510 vec->resize(size); |
510 return; | 511 return; |
511 } | 512 } |
512 std::vector<StorageType> new_storage(size); | 513 std::vector<StorageType> new_storage(size); |
513 for (size_t i = 0; i < vec->size(); i++) | 514 for (size_t i = 0; i < vec->size(); i++) |
514 new (new_storage.at(i).buf) T(at(vec, i).Pass()); | 515 new (new_storage.at(i).buf) T(std::move(at(vec, i))); |
515 vec->swap(new_storage); | 516 vec->swap(new_storage); |
516 Finalize(&new_storage); | 517 Finalize(&new_storage); |
517 } | 518 } |
518 static inline void Clone(const std::vector<StorageType>& src_vec, | 519 static inline void Clone(const std::vector<StorageType>& src_vec, |
519 std::vector<StorageType>* dest_vec) { | 520 std::vector<StorageType>* dest_vec) { |
520 Resize(dest_vec, src_vec.size()); | 521 Resize(dest_vec, src_vec.size()); |
521 for (size_t i = 0; i < src_vec.size(); ++i) | 522 for (size_t i = 0; i < src_vec.size(); ++i) |
522 at(dest_vec, i) = at(&src_vec, i).Clone(); | 523 at(dest_vec, i) = at(&src_vec, i).Clone(); |
523 } | 524 } |
524 }; | 525 }; |
525 | 526 |
526 template <> | 527 template <> |
527 struct WrapperTraits<String, false> { | 528 struct WrapperTraits<String, false> { |
528 typedef String_Data* DataType; | 529 typedef String_Data* DataType; |
529 }; | 530 }; |
530 | 531 |
531 } // namespace internal | 532 } // namespace internal |
532 } // namespace mojo | 533 } // namespace mojo |
533 | 534 |
534 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_INTERNAL_H_ | 535 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_INTERNAL_H_ |
OLD | NEW |