| $$ This is a pump file for generating file templates. Pump is a python |
| $$ script that is part of the Google Test suite of utilities. Description |
| $$ can be found here: |
| $$ |
| $$ http://code.google.com/p/googletest/wiki/PumpManual |
| $$ |
| |
| $$ See comment for MAX_ARITY in base/bind.h.pump. |
| $var MAX_ARITY = 7 |
| $range ARITY 0..MAX_ARITY |
| |
| // Copyright (c) 2013 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_INTERNAL_FUNCTOR_H_ |
| #define BASE_BIND_INTERNAL_FUNCTOR_H_ |
| |
| namespace base { |
| namespace internal { |
| |
| // The RunnableAdapterFunctor<> template is used in a template specialization |
| // for RunnableAdapter<> which enables support for functor objects, including |
| // C++11 lambdas. The functor signature is deduced from the type of the |
| // operator() method using decltype(). |
| // |
| // All supported functors are assumed to have a const qualifier in their |
| // operator() method. |
| |
| template <typename Functor> |
| class RunnableAdapter; |
| |
| template <typename Functor, typename Sig> |
| class RunnableAdapterFunctor; |
| |
| template <typename Functor> |
| class RunnableAdapter |
| : public RunnableAdapterFunctor<Functor, decltype(&Functor::operator())> { |
| public: |
| typedef RunnableAdapterFunctor<Functor, |
| decltype(&Functor::operator())> BaseType; |
| |
| explicit RunnableAdapter(Functor functor) |
| : BaseType(functor) {} |
| }; |
| |
| $for ARITY [[ |
| $range ARG 1..ARITY |
| |
| // Functor: Arity $(ARITY). |
| template <typename F, typename T, typename R[[]] |
| $if ARITY > 0[[, ]] $for ARG , [[typename A$(ARG)]]> |
| class RunnableAdapterFunctor<F, R(T::*)($for ARG , [[A$(ARG)]]) const> { |
| public: |
| typedef R (RunType)($for ARG , [[A$(ARG)]]); |
| |
| explicit RunnableAdapterFunctor(F functor) |
| : functor_(functor) { |
| } |
| |
| R Run($for ARG , [[typename CallbackParamTraits<A$(ARG)>::ForwardType a$(ARG)]]) { |
| return functor_($for ARG , [[CallbackForward(a$(ARG))]]); |
| } |
| |
| private: |
| F functor_; |
| }; |
| |
| ]] $$ for ARITY |
| |
| } // namespace internal |
| } // namespace base |
| |
| #endif // BASE_BIND_INTERNAL_FUNCTOR_H_ |