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

Side by Side Diff: base/bind_helpers.h

Issue 1852433005: Convert //base to use std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase after r384946 Created 4 years, 8 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 | « base/base_paths_win.cc ('k') | base/bind_unittest.cc » ('j') | 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 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 // // Assign to a Callback with a void return type. 114 // // Assign to a Callback with a void return type.
115 // Callback<void(int)> cb = Bind(IgnoreResult(&DoSomething)); 115 // Callback<void(int)> cb = Bind(IgnoreResult(&DoSomething));
116 // cb->Run(1); // Prints "1". 116 // cb->Run(1); // Prints "1".
117 // 117 //
118 // // Prints "1" on |ml|. 118 // // Prints "1" on |ml|.
119 // ml->PostTask(FROM_HERE, Bind(IgnoreResult(&DoSomething), 1); 119 // ml->PostTask(FROM_HERE, Bind(IgnoreResult(&DoSomething), 1);
120 // 120 //
121 // 121 //
122 // EXAMPLE OF Passed(): 122 // EXAMPLE OF Passed():
123 // 123 //
124 // void TakesOwnership(scoped_ptr<Foo> arg) { } 124 // void TakesOwnership(std::unique_ptr<Foo> arg) { }
125 // scoped_ptr<Foo> CreateFoo() { return scoped_ptr<Foo>(new Foo()); } 125 // std::unique_ptr<Foo> CreateFoo() { return std::unique_ptr<Foo>(new Foo());
126 // }
126 // 127 //
127 // scoped_ptr<Foo> f(new Foo()); 128 // std::unique_ptr<Foo> f(new Foo());
128 // 129 //
129 // // |cb| is given ownership of Foo(). |f| is now NULL. 130 // // |cb| is given ownership of Foo(). |f| is now NULL.
130 // // You can use std::move(f) in place of &f, but it's more verbose. 131 // // You can use std::move(f) in place of &f, but it's more verbose.
131 // Closure cb = Bind(&TakesOwnership, Passed(&f)); 132 // Closure cb = Bind(&TakesOwnership, Passed(&f));
132 // 133 //
133 // // Run was never called so |cb| still owns Foo() and deletes 134 // // Run was never called so |cb| still owns Foo() and deletes
134 // // it on Reset(). 135 // // it on Reset().
135 // cb.Reset(); 136 // cb.Reset();
136 // 137 //
137 // // |cb| is given a new Foo created by CreateFoo(). 138 // // |cb| is given a new Foo created by CreateFoo().
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 347
347 template <typename T> 348 template <typename T>
348 struct IgnoreResultHelper<Callback<T> > { 349 struct IgnoreResultHelper<Callback<T> > {
349 explicit IgnoreResultHelper(const Callback<T>& functor) : functor_(functor) {} 350 explicit IgnoreResultHelper(const Callback<T>& functor) : functor_(functor) {}
350 351
351 const Callback<T>& functor_; 352 const Callback<T>& functor_;
352 }; 353 };
353 354
354 // An alternate implementation is to avoid the destructive copy, and instead 355 // An alternate implementation is to avoid the destructive copy, and instead
355 // specialize ParamTraits<> for OwnedWrapper<> to change the StorageType to 356 // specialize ParamTraits<> for OwnedWrapper<> to change the StorageType to
356 // a class that is essentially a scoped_ptr<>. 357 // a class that is essentially a std::unique_ptr<>.
357 // 358 //
358 // The current implementation has the benefit though of leaving ParamTraits<> 359 // The current implementation has the benefit though of leaving ParamTraits<>
359 // fully in callback_internal.h as well as avoiding type conversions during 360 // fully in callback_internal.h as well as avoiding type conversions during
360 // storage. 361 // storage.
361 template <typename T> 362 template <typename T>
362 class OwnedWrapper { 363 class OwnedWrapper {
363 public: 364 public:
364 explicit OwnedWrapper(T* o) : ptr_(o) {} 365 explicit OwnedWrapper(T* o) : ptr_(o) {}
365 ~OwnedWrapper() { delete ptr_; } 366 ~OwnedWrapper() { delete ptr_; }
366 T* get() const { return ptr_; } 367 T* get() const { return ptr_; }
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
622 BASE_EXPORT void DoNothing(); 623 BASE_EXPORT void DoNothing();
623 624
624 template<typename T> 625 template<typename T>
625 void DeletePointer(T* obj) { 626 void DeletePointer(T* obj) {
626 delete obj; 627 delete obj;
627 } 628 }
628 629
629 } // namespace base 630 } // namespace base
630 631
631 #endif // BASE_BIND_HELPERS_H_ 632 #endif // BASE_BIND_HELPERS_H_
OLDNEW
« no previous file with comments | « base/base_paths_win.cc ('k') | base/bind_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698