ajwong@chromium.org | b38d357 | 2011-02-15 01:27:38 | [diff] [blame] | 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 |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #ifndef BASE_BIND_H_ |
| 6 | #define BASE_BIND_H_ |
ajwong@chromium.org | b38d357 | 2011-02-15 01:27:38 | [diff] [blame] | 7 | |
| 8 | #include "base/bind_internal.h" |
ajwong@chromium.org | b38d357 | 2011-02-15 01:27:38 | [diff] [blame] | 9 | |
brettw@chromium.org | 2429264 | 2012-07-12 20:06:40 | [diff] [blame] | 10 | // ----------------------------------------------------------------------------- |
| 11 | // Usage documentation |
| 12 | // ----------------------------------------------------------------------------- |
ajwong@chromium.org | b38d357 | 2011-02-15 01:27:38 | [diff] [blame] | 13 | // |
brettw@chromium.org | 2429264 | 2012-07-12 20:06:40 | [diff] [blame] | 14 | // See base/callback.h for documentation. |
| 15 | // |
| 16 | // |
| 17 | // ----------------------------------------------------------------------------- |
| 18 | // Implementation notes |
| 19 | // ----------------------------------------------------------------------------- |
| 20 | // |
| 21 | // If you're reading the implementation, before proceeding further, you should |
| 22 | // read the top comment of base/bind_internal.h for a definition of common |
| 23 | // terms and concepts. |
ajwong@chromium.org | b38d357 | 2011-02-15 01:27:38 | [diff] [blame] | 24 | |
| 25 | namespace base { |
| 26 | |
tzik | 401dd367 | 2014-11-26 07:54:58 | [diff] [blame] | 27 | template <typename Functor, typename... Args> |
tzik | 99de02b | 2016-07-01 05:54:12 | [diff] [blame^] | 28 | inline base::Callback<MakeUnboundRunType<Functor, Args...>> Bind( |
| 29 | Functor&& functor, |
| 30 | Args&&... args) { |
| 31 | using BindState = internal::MakeBindStateType<Functor, Args...>; |
tzik | caf1d84b | 2016-06-28 12:22:21 | [diff] [blame] | 32 | using UnboundRunType = MakeUnboundRunType<Functor, Args...>; |
tzik | caf1d84b | 2016-06-28 12:22:21 | [diff] [blame] | 33 | using Invoker = internal::Invoker<BindState, UnboundRunType>; |
ajwong@chromium.org | e24f876 | 2011-12-20 00:10:04 | [diff] [blame] | 34 | |
tzik | 99de02b | 2016-07-01 05:54:12 | [diff] [blame^] | 35 | using CallbackType = Callback<UnboundRunType>; |
| 36 | return CallbackType(new BindState(std::forward<Functor>(functor), |
tzik | caf1d84b | 2016-06-28 12:22:21 | [diff] [blame] | 37 | std::forward<Args>(args)...), |
| 38 | &Invoker::Run); |
ajwong@chromium.org | fccef155 | 2011-11-28 22:13:54 | [diff] [blame] | 39 | } |
| 40 | |
ajwong@chromium.org | b38d357 | 2011-02-15 01:27:38 | [diff] [blame] | 41 | } // namespace base |
| 42 | |
| 43 | #endif // BASE_BIND_H_ |