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

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

Powered by Google App Engine
This is Rietveld 408576698