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

Side by Side Diff: mojo/public/cpp/bindings/lib/map_internal.h

Issue 1535943002: Convert Pass()→std::move() in //mojo/public/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Regenerate correctly Created 4 years, 12 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 unified diff | Download patch
OLDNEW
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_MAP_INTERNAL_H_ 5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_MAP_INTERNAL_H_
6 #define MOJO_PUBLIC_CPP_BINDINGS_LIB_MAP_INTERNAL_H_ 6 #define MOJO_PUBLIC_CPP_BINDINGS_LIB_MAP_INTERNAL_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9
10 #include <map> 9 #include <map>
10 #include <utility>
11 11
12 #include "mojo/public/cpp/bindings/array.h" 12 #include "mojo/public/cpp/bindings/array.h"
13 #include "mojo/public/cpp/bindings/lib/template_util.h" 13 #include "mojo/public/cpp/bindings/lib/template_util.h"
14 14
15 namespace mojo { 15 namespace mojo {
16 namespace internal { 16 namespace internal {
17 17
18 template <typename Key, typename Value, bool kValueIsMoveOnlyType> 18 template <typename Key, typename Value, bool kValueIsMoveOnlyType>
19 struct MapTraits {}; 19 struct MapTraits {};
20 20
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 mojo::Array<Key>* keys, 139 mojo::Array<Key>* keys,
140 mojo::Array<Value>* values) { 140 mojo::Array<Value>* values) {
141 keys->resize(m->size()); 141 keys->resize(m->size());
142 values->resize(m->size()); 142 values->resize(m->size());
143 int i = 0; 143 int i = 0;
144 for (typename std::map<KeyStorageType, ValueStorageType>::iterator 144 for (typename std::map<KeyStorageType, ValueStorageType>::iterator
145 it = m->begin(); 145 it = m->begin();
146 it != m->end(); 146 it != m->end();
147 ++it, ++i) { 147 ++it, ++i) {
148 (*keys)[i] = it->first; 148 (*keys)[i] = it->first;
149 (*values)[i] = GetValue(it).Pass(); 149 (*values)[i] = std::move(GetValue(it));
150 } 150 }
151 } 151 }
152 static inline void Finalize(std::map<KeyStorageType, ValueStorageType>* m) { 152 static inline void Finalize(std::map<KeyStorageType, ValueStorageType>* m) {
153 for (auto& pair : *m) 153 for (auto& pair : *m)
154 reinterpret_cast<Value*>(pair.second.buf)->~Value(); 154 reinterpret_cast<Value*>(pair.second.buf)->~Value();
155 } 155 }
156 static inline ValueRefType at(std::map<KeyStorageType, ValueStorageType>* m, 156 static inline ValueRefType at(std::map<KeyStorageType, ValueStorageType>* m,
157 KeyForwardType key) { 157 KeyForwardType key) {
158 // We don't have C++11 library support yet, so we have to emulate the crash 158 // We don't have C++11 library support yet, so we have to emulate the crash
159 // on a non-existent key. 159 // on a non-existent key.
(...skipping 23 matching lines...) Expand all
183 return GetValue(it); 183 return GetValue(it);
184 } 184 }
185 static inline void Insert(std::map<KeyStorageType, ValueStorageType>* m, 185 static inline void Insert(std::map<KeyStorageType, ValueStorageType>* m,
186 KeyForwardType key, 186 KeyForwardType key,
187 ValueRefType value) { 187 ValueRefType value) {
188 // STL insert() doesn't insert |value| if |key| is already part of |m|. We 188 // STL insert() doesn't insert |value| if |key| is already part of |m|. We
189 // have to use operator[] to initialize into the storage buffer, but we 189 // have to use operator[] to initialize into the storage buffer, but we
190 // have to do a manual check so that we don't overwrite an existing object. 190 // have to do a manual check so that we don't overwrite an existing object.
191 auto it = m->find(key); 191 auto it = m->find(key);
192 if (it == m->end()) 192 if (it == m->end())
193 new ((*m)[key].buf) Value(value.Pass()); 193 new ((*m)[key].buf) Value(std::move(value));
194 } 194 }
195 static inline KeyConstRefType GetKey( 195 static inline KeyConstRefType GetKey(
196 const typename std::map<KeyStorageType, ValueStorageType>::const_iterator& 196 const typename std::map<KeyStorageType, ValueStorageType>::const_iterator&
197 it) { 197 it) {
198 return it->first; 198 return it->first;
199 } 199 }
200 static inline ValueConstRefType GetValue( 200 static inline ValueConstRefType GetValue(
201 const typename std::map<KeyStorageType, ValueStorageType>::const_iterator& 201 const typename std::map<KeyStorageType, ValueStorageType>::const_iterator&
202 it) { 202 it) {
203 return *reinterpret_cast<const Value*>(it->second.buf); 203 return *reinterpret_cast<const Value*>(it->second.buf);
204 } 204 }
205 static inline ValueRefType GetValue( 205 static inline ValueRefType GetValue(
206 const typename std::map<KeyStorageType, ValueStorageType>::iterator& it) { 206 const typename std::map<KeyStorageType, ValueStorageType>::iterator& it) {
207 return *reinterpret_cast<Value*>(it->second.buf); 207 return *reinterpret_cast<Value*>(it->second.buf);
208 } 208 }
209 static inline void Clone( 209 static inline void Clone(
210 const std::map<KeyStorageType, ValueStorageType>& src, 210 const std::map<KeyStorageType, ValueStorageType>& src,
211 std::map<KeyStorageType, ValueStorageType>* dst) { 211 std::map<KeyStorageType, ValueStorageType>* dst) {
212 Finalize(dst); 212 Finalize(dst);
213 dst->clear(); 213 dst->clear();
214 for (auto it = src.begin(); it != src.end(); ++it) 214 for (auto it = src.begin(); it != src.end(); ++it)
215 new ((*dst)[it->first].buf) Value(GetValue(it).Clone()); 215 new ((*dst)[it->first].buf) Value(GetValue(it).Clone());
216 } 216 }
217 }; 217 };
218 218
219 } // namespace internal 219 } // namespace internal
220 } // namespace mojo 220 } // namespace mojo
221 221
222 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_MAP_INTERNAL_H_ 222 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_MAP_INTERNAL_H_
OLDNEW
« no previous file with comments | « mojo/public/cpp/bindings/lib/interface_ptr_state.h ('k') | mojo/public/cpp/bindings/lib/map_serialization.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698