diff options
author | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-23 00:08:42 +0000 |
---|---|---|
committer | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-23 00:08:42 +0000 |
commit | a13f122545304dc92550ddf4cf5bed6053d41f4b (patch) | |
tree | db832f9bf947b405d5a2922522302ba1198f096e /base/callback_internal.h | |
parent | d53cbc05cbb75d40e8a088a9eb641c3d3ff6674c (diff) | |
download | chromium_src-a13f122545304dc92550ddf4cf5bed6053d41f4b.zip chromium_src-a13f122545304dc92550ddf4cf5bed6053d41f4b.tar.gz chromium_src-a13f122545304dc92550ddf4cf5bed6053d41f4b.tar.bz2 |
Fix ScopedVector<T> passing via base::Bind()
The original implementation neglected to define the necessary
CallbackParamTraits and CallbackForward implementations for ScopedVector.
Fix scoped_ptr_malloc and scoped_array while I'm at it. Awesome.
BUG=NONE
TEST=scoped_vector_unittest.cc
Review URL: http://codereview.chromium.org/9827003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@128350 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/callback_internal.h')
-rw-r--r-- | base/callback_internal.h | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/base/callback_internal.h b/base/callback_internal.h index 21599bf..244504b 100644 --- a/base/callback_internal.h +++ b/base/callback_internal.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -15,6 +15,9 @@ #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" +template <typename T> +class ScopedVector; + namespace base { namespace internal { @@ -146,6 +149,12 @@ struct CallbackParamTraits<scoped_ptr_malloc<T> > { typedef scoped_ptr_malloc<T> StorageType; }; +template <typename T> +struct CallbackParamTraits<ScopedVector<T> > { + typedef ScopedVector<T> ForwardType; + typedef ScopedVector<T> StorageType; +}; + // CallbackForward() is a very limited simulation of C++11's std::forward() // used by the Callback/Bind system for a set of movable-but-not-copyable // types. It is needed because forwarding a movable-but-not-copyable @@ -164,10 +173,15 @@ template <typename T> scoped_ptr<T> CallbackForward(scoped_ptr<T>& p) { return p.Pass(); } template <typename T> -scoped_ptr<T> CallbackForward(scoped_array<T>& p) { return p.Pass(); } +scoped_array<T> CallbackForward(scoped_array<T>& p) { return p.Pass(); } + +template <typename T> +scoped_ptr_malloc<T> CallbackForward(scoped_ptr_malloc<T>& p) { + return p.Pass(); +} template <typename T> -scoped_ptr<T> CallbackForward(scoped_ptr_malloc<T>& p) { return p.Pass(); } +ScopedVector<T> CallbackForward(ScopedVector<T>& p) { return p.Pass(); } } // namespace internal } // namespace base |