Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(23)

Unified Diff: mojo/public/cpp/bindings/lib/array_internal.h

Issue 1417843002: Simplify mojo::internal::ArrayTraits. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/public/cpp/bindings/array.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/public/cpp/bindings/lib/array_internal.h
diff --git a/mojo/public/cpp/bindings/lib/array_internal.h b/mojo/public/cpp/bindings/lib/array_internal.h
index b048721fffa0eee368937ab52bcacc57d28f2eae..0953f31a9c0ba8a281a814745fd411d584ca9ca3 100644
--- a/mojo/public/cpp/bindings/lib/array_internal.h
+++ b/mojo/public/cpp/bindings/lib/array_internal.h
@@ -493,20 +493,7 @@ struct ArrayTraits {};
template <typename T>
struct ArrayTraits<T, false> {
- typedef T StorageType;
- typedef typename std::vector<T>::reference RefType;
- typedef typename std::vector<T>::const_reference ConstRefType;
- typedef ConstRefType ForwardType;
- static inline void Finalize(std::vector<T>* vec) {}
- static inline ConstRefType at(const std::vector<T>* vec, size_t offset) {
- return vec->at(offset);
- }
- static inline RefType at(std::vector<T>* vec, size_t offset) {
- return vec->at(offset);
- }
- static inline void Resize(std::vector<T>* vec, size_t size) {
- vec->resize(size);
- }
+ typedef typename std::vector<T>::const_reference ForwardType;
static inline void PushBack(std::vector<T>* vec, ForwardType value) {
vec->push_back(value);
}
@@ -518,52 +505,15 @@ struct ArrayTraits<T, false> {
template <typename T>
struct ArrayTraits<T, true> {
- struct StorageType {
- char buf[sizeof(T) + (8 - (sizeof(T) % 8)) % 8]; // Make 8-byte aligned.
- };
- typedef T& RefType;
- typedef const T& ConstRefType;
typedef T ForwardType;
- static inline void Finalize(std::vector<StorageType>* vec) {
- for (size_t i = 0; i < vec->size(); ++i)
- reinterpret_cast<T*>(vec->at(i).buf)->~T();
- }
- static inline ConstRefType at(const std::vector<StorageType>* vec,
- size_t offset) {
- return *reinterpret_cast<const T*>(vec->at(offset).buf);
- }
- static inline RefType at(std::vector<StorageType>* vec, size_t offset) {
- return *reinterpret_cast<T*>(vec->at(offset).buf);
- }
- static inline void Resize(std::vector<StorageType>* vec, size_t size) {
- size_t old_size = vec->size();
- for (size_t i = size; i < old_size; i++)
- reinterpret_cast<T*>(vec->at(i).buf)->~T();
- ResizeStorage(vec, size);
- for (size_t i = old_size; i < vec->size(); i++)
- new (vec->at(i).buf) T();
- }
- static inline void PushBack(std::vector<StorageType>* vec, RefType value) {
- size_t old_size = vec->size();
- ResizeStorage(vec, old_size + 1);
- new (vec->at(old_size).buf) T(value.Pass());
- }
- static inline void ResizeStorage(std::vector<StorageType>* vec, size_t size) {
- if (size <= vec->capacity()) {
- vec->resize(size);
- return;
- }
- std::vector<StorageType> new_storage(size);
- for (size_t i = 0; i < vec->size(); i++)
- new (new_storage.at(i).buf) T(at(vec, i).Pass());
- vec->swap(new_storage);
- Finalize(&new_storage);
- }
- static inline void Clone(const std::vector<StorageType>& src_vec,
- std::vector<StorageType>* dest_vec) {
- Resize(dest_vec, src_vec.size());
+ static inline void PushBack(std::vector<T>* vec, T& value) {
+ vec->push_back(value.Pass());
+ }
+ static inline void Clone(const std::vector<T>& src_vec,
+ std::vector<T>* dest_vec) {
+ dest_vec->resize(src_vec.size());
for (size_t i = 0; i < src_vec.size(); ++i)
- at(dest_vec, i) = at(&src_vec, i).Clone();
+ dest_vec->at(i) = src_vec.at(i).Clone();
}
};
« no previous file with comments | « mojo/public/cpp/bindings/array.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698