blob: ede69bc0d8787f58111da4252d2fb95f59625c48 [file] [log] [blame]
// This file was GENERATED by command:
// pump.py bind_internal_functor.h.pump
// DO NOT EDIT BY HAND!!!
// 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) {}
};
// Functor: Arity 0.
template <typename F, typename T, typename R>
class RunnableAdapterFunctor<F, R(T::*)() const> {
public:
typedef R (RunType)();
explicit RunnableAdapterFunctor(F functor)
: functor_(functor) {
}
R Run() {
return functor_();
}
private:
F functor_;
};
// Functor: Arity 1.
template <typename F, typename T, typename R, typename A1>
class RunnableAdapterFunctor<F, R(T::*)(A1) const> {
public:
typedef R (RunType)(A1);
explicit RunnableAdapterFunctor(F functor)
: functor_(functor) {
}
R Run(typename CallbackParamTraits<A1>::ForwardType a1) {
return functor_(CallbackForward(a1));
}
private:
F functor_;
};
// Functor: Arity 2.
template <typename F, typename T, typename R, typename A1, typename A2>
class RunnableAdapterFunctor<F, R(T::*)(A1, A2) const> {
public:
typedef R (RunType)(A1, A2);
explicit RunnableAdapterFunctor(F functor)
: functor_(functor) {
}
R Run(typename CallbackParamTraits<A1>::ForwardType a1,
typename CallbackParamTraits<A2>::ForwardType a2) {
return functor_(CallbackForward(a1), CallbackForward(a2));
}
private:
F functor_;
};
// Functor: Arity 3.
template <typename F, typename T, typename R, typename A1, typename A2,
typename A3>
class RunnableAdapterFunctor<F, R(T::*)(A1, A2, A3) const> {
public:
typedef R (RunType)(A1, A2, A3);
explicit RunnableAdapterFunctor(F functor)
: functor_(functor) {
}
R Run(typename CallbackParamTraits<A1>::ForwardType a1,
typename CallbackParamTraits<A2>::ForwardType a2,
typename CallbackParamTraits<A3>::ForwardType a3) {
return functor_(CallbackForward(a1), CallbackForward(a2),
CallbackForward(a3));
}
private:
F functor_;
};
// Functor: Arity 4.
template <typename F, typename T, typename R, typename A1, typename A2,
typename A3, typename A4>
class RunnableAdapterFunctor<F, R(T::*)(A1, A2, A3, A4) const> {
public:
typedef R (RunType)(A1, A2, A3, A4);
explicit RunnableAdapterFunctor(F functor)
: functor_(functor) {
}
R Run(typename CallbackParamTraits<A1>::ForwardType a1,
typename CallbackParamTraits<A2>::ForwardType a2,
typename CallbackParamTraits<A3>::ForwardType a3,
typename CallbackParamTraits<A4>::ForwardType a4) {
return functor_(CallbackForward(a1), CallbackForward(a2),
CallbackForward(a3), CallbackForward(a4));
}
private:
F functor_;
};
// Functor: Arity 5.
template <typename F, typename T, typename R, typename A1, typename A2,
typename A3, typename A4, typename A5>
class RunnableAdapterFunctor<F, R(T::*)(A1, A2, A3, A4, A5) const> {
public:
typedef R (RunType)(A1, A2, A3, A4, A5);
explicit RunnableAdapterFunctor(F functor)
: functor_(functor) {
}
R Run(typename CallbackParamTraits<A1>::ForwardType a1,
typename CallbackParamTraits<A2>::ForwardType a2,
typename CallbackParamTraits<A3>::ForwardType a3,
typename CallbackParamTraits<A4>::ForwardType a4,
typename CallbackParamTraits<A5>::ForwardType a5) {
return functor_(CallbackForward(a1), CallbackForward(a2),
CallbackForward(a3), CallbackForward(a4), CallbackForward(a5));
}
private:
F functor_;
};
// Functor: Arity 6.
template <typename F, typename T, typename R, typename A1, typename A2,
typename A3, typename A4, typename A5, typename A6>
class RunnableAdapterFunctor<F, R(T::*)(A1, A2, A3, A4, A5, A6) const> {
public:
typedef R (RunType)(A1, A2, A3, A4, A5, A6);
explicit RunnableAdapterFunctor(F functor)
: functor_(functor) {
}
R Run(typename CallbackParamTraits<A1>::ForwardType a1,
typename CallbackParamTraits<A2>::ForwardType a2,
typename CallbackParamTraits<A3>::ForwardType a3,
typename CallbackParamTraits<A4>::ForwardType a4,
typename CallbackParamTraits<A5>::ForwardType a5,
typename CallbackParamTraits<A6>::ForwardType a6) {
return functor_(CallbackForward(a1), CallbackForward(a2),
CallbackForward(a3), CallbackForward(a4), CallbackForward(a5),
CallbackForward(a6));
}
private:
F functor_;
};
// Functor: Arity 7.
template <typename F, typename T, typename R, typename A1, typename A2,
typename A3, typename A4, typename A5, typename A6, typename A7>
class RunnableAdapterFunctor<F, R(T::*)(A1, A2, A3, A4, A5, A6, A7) const> {
public:
typedef R (RunType)(A1, A2, A3, A4, A5, A6, A7);
explicit RunnableAdapterFunctor(F functor)
: functor_(functor) {
}
R Run(typename CallbackParamTraits<A1>::ForwardType a1,
typename CallbackParamTraits<A2>::ForwardType a2,
typename CallbackParamTraits<A3>::ForwardType a3,
typename CallbackParamTraits<A4>::ForwardType a4,
typename CallbackParamTraits<A5>::ForwardType a5,
typename CallbackParamTraits<A6>::ForwardType a6,
typename CallbackParamTraits<A7>::ForwardType a7) {
return functor_(CallbackForward(a1), CallbackForward(a2),
CallbackForward(a3), CallbackForward(a4), CallbackForward(a5),
CallbackForward(a6), CallbackForward(a7));
}
private:
F functor_;
};
} // namespace internal
} // namespace base
#endif // BASE_BIND_INTERNAL_FUNCTOR_H_