| Index: base/bind.h | 
| diff --git a/base/bind.h b/base/bind.h | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..c23af2ef8aedb5640abd5c16523b122a953b77c4 | 
| --- /dev/null | 
| +++ b/base/bind.h | 
| @@ -0,0 +1,99 @@ | 
| +// This file was GENERATED by command: | 
| +//     pump.py bind.h.pump | 
| +// DO NOT EDIT BY HAND!!! | 
| + | 
| + | 
| +// Copyright (c) 2011 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. | 
| + | 
| +#ifndef BASE_BIND_H_ | 
| +#define BASE_BIND_H_ | 
| +#pragma once | 
| + | 
| +#include "base/bind_internal.h" | 
| +#include "base/callback_helpers.h" | 
| + | 
| +// See base/callback.h for how to use these functions. | 
| +// | 
| +// IMPLEMENTATION NOTE | 
| +// Though Bind()'s result is meant to be stored in a Callback<> type, it | 
| +// cannot actually return the exact type without requiring a large amount | 
| +// of extra template specializations. The problem is that in order to | 
| +// discern the correct specialization of Callback<>, Bind would need to | 
| +// unwrap the function signature to determine the signature's arity, and | 
| +// whether or not it is a method. | 
| +// | 
| +// Each unique combination of (arity, function_type, num_prebound) where | 
| +// function_type is one of {function, method, const_method} would require | 
| +// one specialization.  We eventually have to do a similar number of | 
| +// specializations anyways in the implementation (see the FunctionTraitsN, | 
| +// classes).  However, it is avoidable in Bind if we return the result | 
| +// via an indirection like we do below. | 
| + | 
| +namespace base { | 
| + | 
| +template <typename Sig> | 
| +internal::InvokerStorageHolder<internal::InvokerStorage0<Sig> > | 
| +Bind(Sig f) { | 
| +  return internal::MakeInvokerStorageHolder( | 
| +      new internal::InvokerStorage0<Sig>(f)); | 
| +} | 
| + | 
| +template <typename Sig, typename P1> | 
| +internal::InvokerStorageHolder<internal::InvokerStorage1<Sig,P1> > | 
| +Bind(Sig f, const P1& p1) { | 
| +  return internal::MakeInvokerStorageHolder( | 
| +      new internal::InvokerStorage1<Sig, P1>( | 
| +          f, p1)); | 
| +} | 
| + | 
| +template <typename Sig, typename P1, typename P2> | 
| +internal::InvokerStorageHolder<internal::InvokerStorage2<Sig,P1, P2> > | 
| +Bind(Sig f, const P1& p1, const P2& p2) { | 
| +  return internal::MakeInvokerStorageHolder( | 
| +      new internal::InvokerStorage2<Sig, P1, P2>( | 
| +          f, p1, p2)); | 
| +} | 
| + | 
| +template <typename Sig, typename P1, typename P2, typename P3> | 
| +internal::InvokerStorageHolder<internal::InvokerStorage3<Sig,P1, P2, P3> > | 
| +Bind(Sig f, const P1& p1, const P2& p2, const P3& p3) { | 
| +  return internal::MakeInvokerStorageHolder( | 
| +      new internal::InvokerStorage3<Sig, P1, P2, P3>( | 
| +          f, p1, p2, p3)); | 
| +} | 
| + | 
| +template <typename Sig, typename P1, typename P2, typename P3, typename P4> | 
| +internal::InvokerStorageHolder<internal::InvokerStorage4<Sig,P1, P2, P3, P4> > | 
| +Bind(Sig f, const P1& p1, const P2& p2, const P3& p3, const P4& p4) { | 
| +  return internal::MakeInvokerStorageHolder( | 
| +      new internal::InvokerStorage4<Sig, P1, P2, P3, P4>( | 
| +          f, p1, p2, p3, p4)); | 
| +} | 
| + | 
| +template <typename Sig, typename P1, typename P2, typename P3, typename P4, | 
| +    typename P5> | 
| +internal::InvokerStorageHolder<internal::InvokerStorage5<Sig,P1, P2, P3, P4, | 
| +    P5> > | 
| +Bind(Sig f, const P1& p1, const P2& p2, const P3& p3, const P4& p4, | 
| +    const P5& p5) { | 
| +  return internal::MakeInvokerStorageHolder( | 
| +      new internal::InvokerStorage5<Sig, P1, P2, P3, P4, P5>( | 
| +          f, p1, p2, p3, p4, p5)); | 
| +} | 
| + | 
| +template <typename Sig, typename P1, typename P2, typename P3, typename P4, | 
| +    typename P5, typename P6> | 
| +internal::InvokerStorageHolder<internal::InvokerStorage6<Sig,P1, P2, P3, P4, | 
| +    P5, P6> > | 
| +Bind(Sig f, const P1& p1, const P2& p2, const P3& p3, const P4& p4, | 
| +    const P5& p5, const P6& p6) { | 
| +  return internal::MakeInvokerStorageHolder( | 
| +      new internal::InvokerStorage6<Sig, P1, P2, P3, P4, P5, P6>( | 
| +          f, p1, p2, p3, p4, p5, p6)); | 
| +} | 
| + | 
| +}  // namespace base | 
| + | 
| +#endif  // BASE_BIND_H_ | 
|  |