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

Side by Side Diff: base/bind_helpers.h

Issue 2118173002: Make OwnedWrapper and PassedWrapper move-only (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@30_sync
Patch Set: rebase Created 4 years, 5 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 // This defines a set of argument wrappers and related factory methods that 5 // This defines a set of argument wrappers and related factory methods that
6 // can be used specify the refcounting and reference semantics of arguments 6 // can be used specify the refcounting and reference semantics of arguments
7 // that are bound by the Bind() function in base/bind.h. 7 // that are bound by the Bind() function in base/bind.h.
8 // 8 //
9 // It also defines a set of simple functions and utilities that people want 9 // It also defines a set of simple functions and utilities that people want
10 // when using Callback<> and Bind(). 10 // when using Callback<> and Bind().
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 // 218 //
219 // The current implementation has the benefit though of leaving ParamTraits<> 219 // The current implementation has the benefit though of leaving ParamTraits<>
220 // fully in callback_internal.h as well as avoiding type conversions during 220 // fully in callback_internal.h as well as avoiding type conversions during
221 // storage. 221 // storage.
222 template <typename T> 222 template <typename T>
223 class OwnedWrapper { 223 class OwnedWrapper {
224 public: 224 public:
225 explicit OwnedWrapper(T* o) : ptr_(o) {} 225 explicit OwnedWrapper(T* o) : ptr_(o) {}
226 ~OwnedWrapper() { delete ptr_; } 226 ~OwnedWrapper() { delete ptr_; }
227 T* get() const { return ptr_; } 227 T* get() const { return ptr_; }
228 OwnedWrapper(const OwnedWrapper& other) { 228 OwnedWrapper(OwnedWrapper&& other) {
229 ptr_ = other.ptr_; 229 ptr_ = other.ptr_;
230 other.ptr_ = NULL; 230 other.ptr_ = NULL;
231 } 231 }
232 232
233 private: 233 private:
234 mutable T* ptr_; 234 mutable T* ptr_;
235 }; 235 };
236 236
237 // PassedWrapper is a copyable adapter for a scoper that ignores const. 237 // PassedWrapper is a copyable adapter for a scoper that ignores const.
238 // 238 //
(...skipping 16 matching lines...) Expand all
255 // bound to a Callback. We guard this explicitly at the call of Passed() 255 // bound to a Callback. We guard this explicitly at the call of Passed()
256 // to make for clear errors. Things not given to Passed() will be forwarded 256 // to make for clear errors. Things not given to Passed() will be forwarded
257 // and stored by value which will not work for general move-only types. 257 // and stored by value which will not work for general move-only types.
258 // 2) is_valid_ is distinct from NULL because it is valid to bind a "NULL" 258 // 2) is_valid_ is distinct from NULL because it is valid to bind a "NULL"
259 // scoper to a Callback and allow the Callback to execute once. 259 // scoper to a Callback and allow the Callback to execute once.
260 template <typename T> 260 template <typename T>
261 class PassedWrapper { 261 class PassedWrapper {
262 public: 262 public:
263 explicit PassedWrapper(T&& scoper) 263 explicit PassedWrapper(T&& scoper)
264 : is_valid_(true), scoper_(std::move(scoper)) {} 264 : is_valid_(true), scoper_(std::move(scoper)) {}
265 PassedWrapper(const PassedWrapper& other) 265 PassedWrapper(PassedWrapper&& other)
266 : is_valid_(other.is_valid_), scoper_(std::move(other.scoper_)) {} 266 : is_valid_(other.is_valid_), scoper_(std::move(other.scoper_)) {}
267 T Take() const { 267 T Take() const {
268 CHECK(is_valid_); 268 CHECK(is_valid_);
269 is_valid_ = false; 269 is_valid_ = false;
270 return std::move(scoper_); 270 return std::move(scoper_);
271 } 271 }
272 272
273 private: 273 private:
274 mutable bool is_valid_; 274 mutable bool is_valid_;
275 mutable T scoper_; 275 mutable T scoper_;
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 493
494 template <typename T> 494 template <typename T>
495 struct IsWeakReceiver<internal::ConstRefWrapper<T>> : IsWeakReceiver<T> {}; 495 struct IsWeakReceiver<internal::ConstRefWrapper<T>> : IsWeakReceiver<T> {};
496 496
497 template <typename T> 497 template <typename T>
498 struct IsWeakReceiver<WeakPtr<T>> : std::true_type {}; 498 struct IsWeakReceiver<WeakPtr<T>> : std::true_type {};
499 499
500 } // namespace base 500 } // namespace base
501 501
502 #endif // BASE_BIND_HELPERS_H_ 502 #endif // BASE_BIND_HELPERS_H_
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698