| OLD | NEW | 
|    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  Loading... | 
|  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  Loading... | 
|  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  Loading... | 
|  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_ | 
| OLD | NEW |