| Index: webrtc/base/bind.h
|
| diff --git a/webrtc/base/bind.h b/webrtc/base/bind.h
|
| index e8c1ab5e915d4936ead727ed4558a65f3ce2e9eb..397a4d5c876608a07ecc5584c2f7f06d42250304 100644
|
| --- a/webrtc/base/bind.h
|
| +++ b/webrtc/base/bind.h
|
| @@ -1,7 +1,3 @@
|
| -// This file was GENERATED by command:
|
| -// pump.py bind.h.pump
|
| -// DO NOT EDIT BY HAND!!!
|
| -
|
| /*
|
| * Copyright 2012 The WebRTC Project Authors. All rights reserved.
|
| *
|
| @@ -12,9 +8,6 @@
|
| * be found in the AUTHORS file in the root of the source tree.
|
| */
|
|
|
| -// To generate bind.h from bind.h.pump, execute:
|
| -// /home/build/google3/third_party/gtest/scripts/pump.py bind.h.pump
|
| -
|
| // Bind() is an overloaded function that converts method calls into function
|
| // objects (aka functors). The method object is captured as a scoped_refptr<> if
|
| // possible, and as a raw pointer otherwise. Any arguments to the method are
|
| @@ -64,6 +57,9 @@
|
| #ifndef WEBRTC_BASE_BIND_H_
|
| #define WEBRTC_BASE_BIND_H_
|
|
|
| +#include <tuple>
|
| +#include <type_traits>
|
| +
|
| #include "webrtc/base/scoped_ref_ptr.h"
|
| #include "webrtc/base/template_util.h"
|
|
|
| @@ -131,1406 +127,94 @@ struct PointerType {
|
|
|
| } // namespace detail
|
|
|
| -template <class ObjectT, class MethodT, class R>
|
| -class MethodFunctor0 {
|
| - public:
|
| - MethodFunctor0(MethodT method, ObjectT* object)
|
| - : method_(method), object_(object) {}
|
| - R operator()() const {
|
| - return (object_->*method_)(); }
|
| - private:
|
| - MethodT method_;
|
| - typename detail::PointerType<ObjectT>::type object_;
|
| -};
|
| -
|
| -template <class FunctorT, class R>
|
| -class Functor0 {
|
| - public:
|
| - explicit Functor0(const FunctorT& functor)
|
| - : functor_(functor) {}
|
| - R operator()() const {
|
| - return functor_(); }
|
| - private:
|
| - FunctorT functor_;
|
| -};
|
| -
|
| -
|
| -#define FP_T(x) R (ObjectT::*x)()
|
| -
|
| -template <class ObjectT, class R>
|
| -MethodFunctor0<ObjectT, FP_T(NONAME), R>
|
| -Bind(FP_T(method), ObjectT* object) {
|
| - return MethodFunctor0<ObjectT, FP_T(NONAME), R>(
|
| - method, object);
|
| -}
|
| -
|
| -#undef FP_T
|
| -#define FP_T(x) R (ObjectT::*x)() const
|
| -
|
| -template <class ObjectT, class R>
|
| -MethodFunctor0<const ObjectT, FP_T(NONAME), R>
|
| -Bind(FP_T(method), const ObjectT* object) {
|
| - return MethodFunctor0<const ObjectT, FP_T(NONAME), R>(
|
| - method, object);
|
| -}
|
| -
|
| -#undef FP_T
|
| -#define FP_T(x) R (ObjectT::*x)()
|
| -
|
| -template <class ObjectT, class R>
|
| -MethodFunctor0<ObjectT, FP_T(NONAME), R>
|
| -Bind(FP_T(method), const scoped_refptr<ObjectT>& object) {
|
| - return MethodFunctor0<ObjectT, FP_T(NONAME), R>(
|
| - method, object.get());
|
| -}
|
| -
|
| -#undef FP_T
|
| -#define FP_T(x) R (*x)()
|
| -
|
| -template <class R>
|
| -Functor0<FP_T(NONAME), R>
|
| -Bind(FP_T(function)) {
|
| - return Functor0<FP_T(NONAME), R>(
|
| - function);
|
| -}
|
| -
|
| -#undef FP_T
|
| -
|
| -template <class ObjectT, class MethodT, class R,
|
| - class P1>
|
| -class MethodFunctor1 {
|
| - public:
|
| - MethodFunctor1(MethodT method, ObjectT* object,
|
| - P1 p1)
|
| - : method_(method), object_(object),
|
| - p1_(p1) {}
|
| - R operator()() const {
|
| - return (object_->*method_)(p1_); }
|
| - private:
|
| - MethodT method_;
|
| - typename detail::PointerType<ObjectT>::type object_;
|
| - typename rtc::remove_reference<P1>::type p1_;
|
| -};
|
| -
|
| -template <class FunctorT, class R,
|
| - class P1>
|
| -class Functor1 {
|
| - public:
|
| - Functor1(const FunctorT& functor, P1 p1)
|
| - : functor_(functor),
|
| - p1_(p1) {}
|
| - R operator()() const {
|
| - return functor_(p1_); }
|
| - private:
|
| - FunctorT functor_;
|
| - typename rtc::remove_reference<P1>::type p1_;
|
| -};
|
| -
|
| -
|
| -#define FP_T(x) R (ObjectT::*x)(P1)
|
| -
|
| -template <class ObjectT, class R,
|
| - class P1>
|
| -MethodFunctor1<ObjectT, FP_T(NONAME), R, P1>
|
| -Bind(FP_T(method), ObjectT* object,
|
| - typename detail::identity<P1>::type p1) {
|
| - return MethodFunctor1<ObjectT, FP_T(NONAME), R, P1>(
|
| - method, object, p1);
|
| -}
|
| -
|
| -#undef FP_T
|
| -#define FP_T(x) R (ObjectT::*x)(P1) const
|
| -
|
| -template <class ObjectT, class R,
|
| - class P1>
|
| -MethodFunctor1<const ObjectT, FP_T(NONAME), R, P1>
|
| -Bind(FP_T(method), const ObjectT* object,
|
| - typename detail::identity<P1>::type p1) {
|
| - return MethodFunctor1<const ObjectT, FP_T(NONAME), R, P1>(
|
| - method, object, p1);
|
| -}
|
| -
|
| -#undef FP_T
|
| -#define FP_T(x) R (ObjectT::*x)(P1)
|
| -
|
| -template <class ObjectT, class R,
|
| - class P1>
|
| -MethodFunctor1<ObjectT, FP_T(NONAME), R, P1>
|
| -Bind(FP_T(method), const scoped_refptr<ObjectT>& object,
|
| - typename detail::identity<P1>::type p1) {
|
| - return MethodFunctor1<ObjectT, FP_T(NONAME), R, P1>(
|
| - method, object.get(), p1);
|
| -}
|
| -
|
| -#undef FP_T
|
| -#define FP_T(x) R (*x)(P1)
|
| -
|
| -template <class R,
|
| - class P1>
|
| -Functor1<FP_T(NONAME), R, P1>
|
| -Bind(FP_T(function),
|
| - typename detail::identity<P1>::type p1) {
|
| - return Functor1<FP_T(NONAME), R, P1>(
|
| - function, p1);
|
| -}
|
| -
|
| -#undef FP_T
|
| -
|
| -template <class ObjectT, class MethodT, class R,
|
| - class P1,
|
| - class P2>
|
| -class MethodFunctor2 {
|
| - public:
|
| - MethodFunctor2(MethodT method, ObjectT* object,
|
| - P1 p1,
|
| - P2 p2)
|
| - : method_(method), object_(object),
|
| - p1_(p1),
|
| - p2_(p2) {}
|
| - R operator()() const {
|
| - return (object_->*method_)(p1_, p2_); }
|
| - private:
|
| - MethodT method_;
|
| - typename detail::PointerType<ObjectT>::type object_;
|
| - typename rtc::remove_reference<P1>::type p1_;
|
| - typename rtc::remove_reference<P2>::type p2_;
|
| -};
|
| -
|
| -template <class FunctorT, class R,
|
| - class P1,
|
| - class P2>
|
| -class Functor2 {
|
| - public:
|
| - Functor2(const FunctorT& functor, P1 p1, P2 p2)
|
| - : functor_(functor),
|
| - p1_(p1),
|
| - p2_(p2) {}
|
| - R operator()() const {
|
| - return functor_(p1_, p2_); }
|
| - private:
|
| - FunctorT functor_;
|
| - typename rtc::remove_reference<P1>::type p1_;
|
| - typename rtc::remove_reference<P2>::type p2_;
|
| -};
|
| -
|
| -
|
| -#define FP_T(x) R (ObjectT::*x)(P1, P2)
|
| -
|
| -template <class ObjectT, class R,
|
| - class P1,
|
| - class P2>
|
| -MethodFunctor2<ObjectT, FP_T(NONAME), R, P1, P2>
|
| -Bind(FP_T(method), ObjectT* object,
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2) {
|
| - return MethodFunctor2<ObjectT, FP_T(NONAME), R, P1, P2>(
|
| - method, object, p1, p2);
|
| -}
|
| -
|
| -#undef FP_T
|
| -#define FP_T(x) R (ObjectT::*x)(P1, P2) const
|
| -
|
| -template <class ObjectT, class R,
|
| - class P1,
|
| - class P2>
|
| -MethodFunctor2<const ObjectT, FP_T(NONAME), R, P1, P2>
|
| -Bind(FP_T(method), const ObjectT* object,
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2) {
|
| - return MethodFunctor2<const ObjectT, FP_T(NONAME), R, P1, P2>(
|
| - method, object, p1, p2);
|
| -}
|
| -
|
| -#undef FP_T
|
| -#define FP_T(x) R (ObjectT::*x)(P1, P2)
|
| -
|
| -template <class ObjectT, class R,
|
| - class P1,
|
| - class P2>
|
| -MethodFunctor2<ObjectT, FP_T(NONAME), R, P1, P2>
|
| -Bind(FP_T(method), const scoped_refptr<ObjectT>& object,
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2) {
|
| - return MethodFunctor2<ObjectT, FP_T(NONAME), R, P1, P2>(
|
| - method, object.get(), p1, p2);
|
| -}
|
| -
|
| -#undef FP_T
|
| -#define FP_T(x) R (*x)(P1, P2)
|
| -
|
| -template <class R,
|
| - class P1,
|
| - class P2>
|
| -Functor2<FP_T(NONAME), R, P1, P2>
|
| -Bind(FP_T(function),
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2) {
|
| - return Functor2<FP_T(NONAME), R, P1, P2>(
|
| - function, p1, p2);
|
| -}
|
| -
|
| -#undef FP_T
|
| -
|
| -template <class ObjectT, class MethodT, class R,
|
| - class P1,
|
| - class P2,
|
| - class P3>
|
| -class MethodFunctor3 {
|
| - public:
|
| - MethodFunctor3(MethodT method, ObjectT* object,
|
| - P1 p1,
|
| - P2 p2,
|
| - P3 p3)
|
| - : method_(method), object_(object),
|
| - p1_(p1),
|
| - p2_(p2),
|
| - p3_(p3) {}
|
| - R operator()() const {
|
| - return (object_->*method_)(p1_, p2_, p3_); }
|
| - private:
|
| - MethodT method_;
|
| - typename detail::PointerType<ObjectT>::type object_;
|
| - typename rtc::remove_reference<P1>::type p1_;
|
| - typename rtc::remove_reference<P2>::type p2_;
|
| - typename rtc::remove_reference<P3>::type p3_;
|
| -};
|
| -
|
| -template <class FunctorT, class R,
|
| - class P1,
|
| - class P2,
|
| - class P3>
|
| -class Functor3 {
|
| - public:
|
| - Functor3(const FunctorT& functor, P1 p1, P2 p2, P3 p3)
|
| - : functor_(functor),
|
| - p1_(p1),
|
| - p2_(p2),
|
| - p3_(p3) {}
|
| - R operator()() const {
|
| - return functor_(p1_, p2_, p3_); }
|
| - private:
|
| - FunctorT functor_;
|
| - typename rtc::remove_reference<P1>::type p1_;
|
| - typename rtc::remove_reference<P2>::type p2_;
|
| - typename rtc::remove_reference<P3>::type p3_;
|
| -};
|
| -
|
| -
|
| -#define FP_T(x) R (ObjectT::*x)(P1, P2, P3)
|
| -
|
| -template <class ObjectT, class R,
|
| - class P1,
|
| - class P2,
|
| - class P3>
|
| -MethodFunctor3<ObjectT, FP_T(NONAME), R, P1, P2, P3>
|
| -Bind(FP_T(method), ObjectT* object,
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2,
|
| - typename detail::identity<P3>::type p3) {
|
| - return MethodFunctor3<ObjectT, FP_T(NONAME), R, P1, P2, P3>(
|
| - method, object, p1, p2, p3);
|
| -}
|
| -
|
| -#undef FP_T
|
| -#define FP_T(x) R (ObjectT::*x)(P1, P2, P3) const
|
| -
|
| -template <class ObjectT, class R,
|
| - class P1,
|
| - class P2,
|
| - class P3>
|
| -MethodFunctor3<const ObjectT, FP_T(NONAME), R, P1, P2, P3>
|
| -Bind(FP_T(method), const ObjectT* object,
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2,
|
| - typename detail::identity<P3>::type p3) {
|
| - return MethodFunctor3<const ObjectT, FP_T(NONAME), R, P1, P2, P3>(
|
| - method, object, p1, p2, p3);
|
| -}
|
| -
|
| -#undef FP_T
|
| -#define FP_T(x) R (ObjectT::*x)(P1, P2, P3)
|
| -
|
| -template <class ObjectT, class R,
|
| - class P1,
|
| - class P2,
|
| - class P3>
|
| -MethodFunctor3<ObjectT, FP_T(NONAME), R, P1, P2, P3>
|
| -Bind(FP_T(method), const scoped_refptr<ObjectT>& object,
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2,
|
| - typename detail::identity<P3>::type p3) {
|
| - return MethodFunctor3<ObjectT, FP_T(NONAME), R, P1, P2, P3>(
|
| - method, object.get(), p1, p2, p3);
|
| -}
|
| -
|
| -#undef FP_T
|
| -#define FP_T(x) R (*x)(P1, P2, P3)
|
| -
|
| -template <class R,
|
| - class P1,
|
| - class P2,
|
| - class P3>
|
| -Functor3<FP_T(NONAME), R, P1, P2, P3>
|
| -Bind(FP_T(function),
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2,
|
| - typename detail::identity<P3>::type p3) {
|
| - return Functor3<FP_T(NONAME), R, P1, P2, P3>(
|
| - function, p1, p2, p3);
|
| -}
|
| -
|
| -#undef FP_T
|
| -
|
| -template <class ObjectT, class MethodT, class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4>
|
| -class MethodFunctor4 {
|
| - public:
|
| - MethodFunctor4(MethodT method, ObjectT* object,
|
| - P1 p1,
|
| - P2 p2,
|
| - P3 p3,
|
| - P4 p4)
|
| - : method_(method), object_(object),
|
| - p1_(p1),
|
| - p2_(p2),
|
| - p3_(p3),
|
| - p4_(p4) {}
|
| - R operator()() const {
|
| - return (object_->*method_)(p1_, p2_, p3_, p4_); }
|
| - private:
|
| - MethodT method_;
|
| - typename detail::PointerType<ObjectT>::type object_;
|
| - typename rtc::remove_reference<P1>::type p1_;
|
| - typename rtc::remove_reference<P2>::type p2_;
|
| - typename rtc::remove_reference<P3>::type p3_;
|
| - typename rtc::remove_reference<P4>::type p4_;
|
| -};
|
| -
|
| -template <class FunctorT, class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4>
|
| -class Functor4 {
|
| - public:
|
| - Functor4(const FunctorT& functor, P1 p1, P2 p2, P3 p3, P4 p4)
|
| - : functor_(functor),
|
| - p1_(p1),
|
| - p2_(p2),
|
| - p3_(p3),
|
| - p4_(p4) {}
|
| - R operator()() const {
|
| - return functor_(p1_, p2_, p3_, p4_); }
|
| - private:
|
| - FunctorT functor_;
|
| - typename rtc::remove_reference<P1>::type p1_;
|
| - typename rtc::remove_reference<P2>::type p2_;
|
| - typename rtc::remove_reference<P3>::type p3_;
|
| - typename rtc::remove_reference<P4>::type p4_;
|
| -};
|
| -
|
| -
|
| -#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4)
|
| -
|
| -template <class ObjectT, class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4>
|
| -MethodFunctor4<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4>
|
| -Bind(FP_T(method), ObjectT* object,
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2,
|
| - typename detail::identity<P3>::type p3,
|
| - typename detail::identity<P4>::type p4) {
|
| - return MethodFunctor4<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4>(
|
| - method, object, p1, p2, p3, p4);
|
| -}
|
| -
|
| -#undef FP_T
|
| -#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4) const
|
| -
|
| -template <class ObjectT, class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4>
|
| -MethodFunctor4<const ObjectT, FP_T(NONAME), R, P1, P2, P3, P4>
|
| -Bind(FP_T(method), const ObjectT* object,
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2,
|
| - typename detail::identity<P3>::type p3,
|
| - typename detail::identity<P4>::type p4) {
|
| - return MethodFunctor4<const ObjectT, FP_T(NONAME), R, P1, P2, P3, P4>(
|
| - method, object, p1, p2, p3, p4);
|
| -}
|
| -
|
| -#undef FP_T
|
| -#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4)
|
| -
|
| -template <class ObjectT, class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4>
|
| -MethodFunctor4<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4>
|
| -Bind(FP_T(method), const scoped_refptr<ObjectT>& object,
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2,
|
| - typename detail::identity<P3>::type p3,
|
| - typename detail::identity<P4>::type p4) {
|
| - return MethodFunctor4<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4>(
|
| - method, object.get(), p1, p2, p3, p4);
|
| -}
|
| -
|
| -#undef FP_T
|
| -#define FP_T(x) R (*x)(P1, P2, P3, P4)
|
| -
|
| -template <class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4>
|
| -Functor4<FP_T(NONAME), R, P1, P2, P3, P4>
|
| -Bind(FP_T(function),
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2,
|
| - typename detail::identity<P3>::type p3,
|
| - typename detail::identity<P4>::type p4) {
|
| - return Functor4<FP_T(NONAME), R, P1, P2, P3, P4>(
|
| - function, p1, p2, p3, p4);
|
| -}
|
| -
|
| -#undef FP_T
|
| -
|
| -template <class ObjectT, class MethodT, class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5>
|
| -class MethodFunctor5 {
|
| - public:
|
| - MethodFunctor5(MethodT method, ObjectT* object,
|
| - P1 p1,
|
| - P2 p2,
|
| - P3 p3,
|
| - P4 p4,
|
| - P5 p5)
|
| - : method_(method), object_(object),
|
| - p1_(p1),
|
| - p2_(p2),
|
| - p3_(p3),
|
| - p4_(p4),
|
| - p5_(p5) {}
|
| - R operator()() const {
|
| - return (object_->*method_)(p1_, p2_, p3_, p4_, p5_); }
|
| - private:
|
| - MethodT method_;
|
| - typename detail::PointerType<ObjectT>::type object_;
|
| - typename rtc::remove_reference<P1>::type p1_;
|
| - typename rtc::remove_reference<P2>::type p2_;
|
| - typename rtc::remove_reference<P3>::type p3_;
|
| - typename rtc::remove_reference<P4>::type p4_;
|
| - typename rtc::remove_reference<P5>::type p5_;
|
| -};
|
| -
|
| -template <class FunctorT, class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5>
|
| -class Functor5 {
|
| - public:
|
| - Functor5(const FunctorT& functor, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5)
|
| - : functor_(functor),
|
| - p1_(p1),
|
| - p2_(p2),
|
| - p3_(p3),
|
| - p4_(p4),
|
| - p5_(p5) {}
|
| - R operator()() const {
|
| - return functor_(p1_, p2_, p3_, p4_, p5_); }
|
| - private:
|
| - FunctorT functor_;
|
| - typename rtc::remove_reference<P1>::type p1_;
|
| - typename rtc::remove_reference<P2>::type p2_;
|
| - typename rtc::remove_reference<P3>::type p3_;
|
| - typename rtc::remove_reference<P4>::type p4_;
|
| - typename rtc::remove_reference<P5>::type p5_;
|
| -};
|
| -
|
| -
|
| -#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5)
|
| -
|
| -template <class ObjectT, class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5>
|
| -MethodFunctor5<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5>
|
| -Bind(FP_T(method), ObjectT* object,
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2,
|
| - typename detail::identity<P3>::type p3,
|
| - typename detail::identity<P4>::type p4,
|
| - typename detail::identity<P5>::type p5) {
|
| - return MethodFunctor5<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5>(
|
| - method, object, p1, p2, p3, p4, p5);
|
| -}
|
| -
|
| -#undef FP_T
|
| -#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5) const
|
| -
|
| -template <class ObjectT, class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5>
|
| -MethodFunctor5<const ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5>
|
| -Bind(FP_T(method), const ObjectT* object,
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2,
|
| - typename detail::identity<P3>::type p3,
|
| - typename detail::identity<P4>::type p4,
|
| - typename detail::identity<P5>::type p5) {
|
| - return MethodFunctor5<const ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5>(
|
| - method, object, p1, p2, p3, p4, p5);
|
| -}
|
| -
|
| -#undef FP_T
|
| -#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5)
|
| -
|
| -template <class ObjectT, class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5>
|
| -MethodFunctor5<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5>
|
| -Bind(FP_T(method), const scoped_refptr<ObjectT>& object,
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2,
|
| - typename detail::identity<P3>::type p3,
|
| - typename detail::identity<P4>::type p4,
|
| - typename detail::identity<P5>::type p5) {
|
| - return MethodFunctor5<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5>(
|
| - method, object.get(), p1, p2, p3, p4, p5);
|
| -}
|
| -
|
| -#undef FP_T
|
| -#define FP_T(x) R (*x)(P1, P2, P3, P4, P5)
|
| -
|
| -template <class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5>
|
| -Functor5<FP_T(NONAME), R, P1, P2, P3, P4, P5>
|
| -Bind(FP_T(function),
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2,
|
| - typename detail::identity<P3>::type p3,
|
| - typename detail::identity<P4>::type p4,
|
| - typename detail::identity<P5>::type p5) {
|
| - return Functor5<FP_T(NONAME), R, P1, P2, P3, P4, P5>(
|
| - function, p1, p2, p3, p4, p5);
|
| -}
|
| -
|
| -#undef FP_T
|
| -
|
| -template <class ObjectT, class MethodT, class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5,
|
| - class P6>
|
| -class MethodFunctor6 {
|
| +template <class ObjectT, class MethodT, class R, typename... Args>
|
| +class MethodFunctor {
|
| public:
|
| - MethodFunctor6(MethodT method, ObjectT* object,
|
| - P1 p1,
|
| - P2 p2,
|
| - P3 p3,
|
| - P4 p4,
|
| - P5 p5,
|
| - P6 p6)
|
| - : method_(method), object_(object),
|
| - p1_(p1),
|
| - p2_(p2),
|
| - p3_(p3),
|
| - p4_(p4),
|
| - p5_(p5),
|
| - p6_(p6) {}
|
| + MethodFunctor(MethodT method, ObjectT* object, Args... args)
|
| + : method_(method), object_(object), args_(args...) {}
|
| R operator()() const {
|
| - return (object_->*method_)(p1_, p2_, p3_, p4_, p5_, p6_); }
|
| - private:
|
| - MethodT method_;
|
| - typename detail::PointerType<ObjectT>::type object_;
|
| - typename rtc::remove_reference<P1>::type p1_;
|
| - typename rtc::remove_reference<P2>::type p2_;
|
| - typename rtc::remove_reference<P3>::type p3_;
|
| - typename rtc::remove_reference<P4>::type p4_;
|
| - typename rtc::remove_reference<P5>::type p5_;
|
| - typename rtc::remove_reference<P6>::type p6_;
|
| -};
|
| + return CallMethod(typename sequence_generator<sizeof...(Args)>::type());
|
| + }
|
|
|
| -template <class FunctorT, class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5,
|
| - class P6>
|
| -class Functor6 {
|
| - public:
|
| - Functor6(const FunctorT& functor, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6)
|
| - : functor_(functor),
|
| - p1_(p1),
|
| - p2_(p2),
|
| - p3_(p3),
|
| - p4_(p4),
|
| - p5_(p5),
|
| - p6_(p6) {}
|
| - R operator()() const {
|
| - return functor_(p1_, p2_, p3_, p4_, p5_, p6_); }
|
| private:
|
| - FunctorT functor_;
|
| - typename rtc::remove_reference<P1>::type p1_;
|
| - typename rtc::remove_reference<P2>::type p2_;
|
| - typename rtc::remove_reference<P3>::type p3_;
|
| - typename rtc::remove_reference<P4>::type p4_;
|
| - typename rtc::remove_reference<P5>::type p5_;
|
| - typename rtc::remove_reference<P6>::type p6_;
|
| -};
|
| -
|
| -
|
| -#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5, P6)
|
| -
|
| -template <class ObjectT, class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5,
|
| - class P6>
|
| -MethodFunctor6<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6>
|
| -Bind(FP_T(method), ObjectT* object,
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2,
|
| - typename detail::identity<P3>::type p3,
|
| - typename detail::identity<P4>::type p4,
|
| - typename detail::identity<P5>::type p5,
|
| - typename detail::identity<P6>::type p6) {
|
| - return MethodFunctor6<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6>(
|
| - method, object, p1, p2, p3, p4, p5, p6);
|
| -}
|
| -
|
| -#undef FP_T
|
| -#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5, P6) const
|
| -
|
| -template <class ObjectT, class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5,
|
| - class P6>
|
| -MethodFunctor6<const ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6>
|
| -Bind(FP_T(method), const ObjectT* object,
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2,
|
| - typename detail::identity<P3>::type p3,
|
| - typename detail::identity<P4>::type p4,
|
| - typename detail::identity<P5>::type p5,
|
| - typename detail::identity<P6>::type p6) {
|
| - return MethodFunctor6<const ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6>(
|
| - method, object, p1, p2, p3, p4, p5, p6);
|
| -}
|
| -
|
| -#undef FP_T
|
| -#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5, P6)
|
| -
|
| -template <class ObjectT, class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5,
|
| - class P6>
|
| -MethodFunctor6<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6>
|
| -Bind(FP_T(method), const scoped_refptr<ObjectT>& object,
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2,
|
| - typename detail::identity<P3>::type p3,
|
| - typename detail::identity<P4>::type p4,
|
| - typename detail::identity<P5>::type p5,
|
| - typename detail::identity<P6>::type p6) {
|
| - return MethodFunctor6<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6>(
|
| - method, object.get(), p1, p2, p3, p4, p5, p6);
|
| -}
|
| -
|
| -#undef FP_T
|
| -#define FP_T(x) R (*x)(P1, P2, P3, P4, P5, P6)
|
| -
|
| -template <class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5,
|
| - class P6>
|
| -Functor6<FP_T(NONAME), R, P1, P2, P3, P4, P5, P6>
|
| -Bind(FP_T(function),
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2,
|
| - typename detail::identity<P3>::type p3,
|
| - typename detail::identity<P4>::type p4,
|
| - typename detail::identity<P5>::type p5,
|
| - typename detail::identity<P6>::type p6) {
|
| - return Functor6<FP_T(NONAME), R, P1, P2, P3, P4, P5, P6>(
|
| - function, p1, p2, p3, p4, p5, p6);
|
| -}
|
| -
|
| -#undef FP_T
|
| -
|
| -template <class ObjectT,
|
| - class MethodT,
|
| - class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5,
|
| - class P6,
|
| - class P7>
|
| -class MethodFunctor7 {
|
| - public:
|
| - MethodFunctor7(MethodT method,
|
| - ObjectT* object,
|
| - P1 p1,
|
| - P2 p2,
|
| - P3 p3,
|
| - P4 p4,
|
| - P5 p5,
|
| - P6 p6,
|
| - P7 p7)
|
| - : method_(method),
|
| - object_(object),
|
| - p1_(p1),
|
| - p2_(p2),
|
| - p3_(p3),
|
| - p4_(p4),
|
| - p5_(p5),
|
| - p6_(p6),
|
| - p7_(p7) {}
|
| - R operator()() const {
|
| - return (object_->*method_)(p1_, p2_, p3_, p4_, p5_, p6_, p7_);
|
| + // Use sequence_generator (see template_util.h) to expand a MethodFunctor
|
| + // with 2 arguments to (std::get<0>(args_), std::get<1>(args_)), for
|
| + // instance.
|
| + template <int... S>
|
| + R CallMethod(sequence<S...>) const {
|
| + return (object_->*method_)(std::get<S>(args_)...);
|
| }
|
|
|
| - private:
|
| MethodT method_;
|
| typename detail::PointerType<ObjectT>::type object_;
|
| - typename rtc::remove_reference<P1>::type p1_;
|
| - typename rtc::remove_reference<P2>::type p2_;
|
| - typename rtc::remove_reference<P3>::type p3_;
|
| - typename rtc::remove_reference<P4>::type p4_;
|
| - typename rtc::remove_reference<P5>::type p5_;
|
| - typename rtc::remove_reference<P6>::type p6_;
|
| - typename rtc::remove_reference<P7>::type p7_;
|
| + typename std::tuple<typename std::remove_reference<Args>::type...> args_;
|
| };
|
|
|
| -template <class FunctorT,
|
| - class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5,
|
| - class P6,
|
| - class P7>
|
| -class Functor7 {
|
| +template <class FunctorT, class R, typename... Args>
|
| +class Functor {
|
| public:
|
| - Functor7(const FunctorT& functor,
|
| - P1 p1,
|
| - P2 p2,
|
| - P3 p3,
|
| - P4 p4,
|
| - P5 p5,
|
| - P6 p6,
|
| - P7 p7)
|
| - : functor_(functor),
|
| - p1_(p1),
|
| - p2_(p2),
|
| - p3_(p3),
|
| - p4_(p4),
|
| - p5_(p5),
|
| - p6_(p6),
|
| - p7_(p7) {}
|
| - R operator()() const { return functor_(p1_, p2_, p3_, p4_, p5_, p6_, p7_); }
|
| -
|
| - private:
|
| - FunctorT functor_;
|
| - typename rtc::remove_reference<P1>::type p1_;
|
| - typename rtc::remove_reference<P2>::type p2_;
|
| - typename rtc::remove_reference<P3>::type p3_;
|
| - typename rtc::remove_reference<P4>::type p4_;
|
| - typename rtc::remove_reference<P5>::type p5_;
|
| - typename rtc::remove_reference<P6>::type p6_;
|
| - typename rtc::remove_reference<P7>::type p7_;
|
| -};
|
| -
|
| -#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5, P6, P7)
|
| -
|
| -template <class ObjectT,
|
| - class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5,
|
| - class P6,
|
| - class P7>
|
| -MethodFunctor7<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7> Bind(
|
| - FP_T(method),
|
| - ObjectT* object,
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2,
|
| - typename detail::identity<P3>::type p3,
|
| - typename detail::identity<P4>::type p4,
|
| - typename detail::identity<P5>::type p5,
|
| - typename detail::identity<P6>::type p6,
|
| - typename detail::identity<P7>::type p7) {
|
| - return MethodFunctor7<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7>(
|
| - method, object, p1, p2, p3, p4, p5, p6, p7);
|
| -}
|
| -
|
| -#undef FP_T
|
| -#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5, P6, P7) const
|
| -
|
| -template <class ObjectT,
|
| - class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5,
|
| - class P6,
|
| - class P7>
|
| -MethodFunctor7<const ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7> Bind(
|
| - FP_T(method),
|
| - const ObjectT* object,
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2,
|
| - typename detail::identity<P3>::type p3,
|
| - typename detail::identity<P4>::type p4,
|
| - typename detail::identity<P5>::type p5,
|
| - typename detail::identity<P6>::type p6,
|
| - typename detail::identity<P7>::type p7) {
|
| - return MethodFunctor7<const ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6,
|
| - P7>(method, object, p1, p2, p3, p4, p5, p6, p7);
|
| -}
|
| -
|
| -#undef FP_T
|
| -#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5, P6, P7)
|
| -
|
| -template <class ObjectT,
|
| - class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5,
|
| - class P6,
|
| - class P7>
|
| -MethodFunctor7<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7> Bind(
|
| - FP_T(method),
|
| - const scoped_refptr<ObjectT>& object,
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2,
|
| - typename detail::identity<P3>::type p3,
|
| - typename detail::identity<P4>::type p4,
|
| - typename detail::identity<P5>::type p5,
|
| - typename detail::identity<P6>::type p6,
|
| - typename detail::identity<P7>::type p7) {
|
| - return MethodFunctor7<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7>(
|
| - method, object.get(), p1, p2, p3, p4, p5, p6, p7);
|
| -}
|
| -
|
| -#undef FP_T
|
| -#define FP_T(x) R (*x)(P1, P2, P3, P4, P5, P6, P7)
|
| -
|
| -template <class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5,
|
| - class P6,
|
| - class P7>
|
| -Functor7<FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7> Bind(
|
| - FP_T(function),
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2,
|
| - typename detail::identity<P3>::type p3,
|
| - typename detail::identity<P4>::type p4,
|
| - typename detail::identity<P5>::type p5,
|
| - typename detail::identity<P6>::type p6,
|
| - typename detail::identity<P7>::type p7) {
|
| - return Functor7<FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7>(
|
| - function, p1, p2, p3, p4, p5, p6, p7);
|
| -}
|
| -
|
| -#undef FP_T
|
| -
|
| -template <class ObjectT,
|
| - class MethodT,
|
| - class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5,
|
| - class P6,
|
| - class P7,
|
| - class P8>
|
| -class MethodFunctor8 {
|
| - public:
|
| - MethodFunctor8(MethodT method,
|
| - ObjectT* object,
|
| - P1 p1,
|
| - P2 p2,
|
| - P3 p3,
|
| - P4 p4,
|
| - P5 p5,
|
| - P6 p6,
|
| - P7 p7,
|
| - P8 p8)
|
| - : method_(method),
|
| - object_(object),
|
| - p1_(p1),
|
| - p2_(p2),
|
| - p3_(p3),
|
| - p4_(p4),
|
| - p5_(p5),
|
| - p6_(p6),
|
| - p7_(p7),
|
| - p8_(p8) {}
|
| + Functor(const FunctorT& functor, Args... args)
|
| + : functor_(functor), args_(args...) {}
|
| R operator()() const {
|
| - return (object_->*method_)(p1_, p2_, p3_, p4_, p5_, p6_, p7_, p8_);
|
| + return CallFunction(typename sequence_generator<sizeof...(Args)>::type());
|
| }
|
|
|
| private:
|
| - MethodT method_;
|
| - typename detail::PointerType<ObjectT>::type object_;
|
| - typename rtc::remove_reference<P1>::type p1_;
|
| - typename rtc::remove_reference<P2>::type p2_;
|
| - typename rtc::remove_reference<P3>::type p3_;
|
| - typename rtc::remove_reference<P4>::type p4_;
|
| - typename rtc::remove_reference<P5>::type p5_;
|
| - typename rtc::remove_reference<P6>::type p6_;
|
| - typename rtc::remove_reference<P7>::type p7_;
|
| - typename rtc::remove_reference<P8>::type p8_;
|
| -};
|
| -
|
| -template <class FunctorT,
|
| - class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5,
|
| - class P6,
|
| - class P7,
|
| - class P8>
|
| -class Functor8 {
|
| - public:
|
| - Functor8(const FunctorT& functor,
|
| - P1 p1,
|
| - P2 p2,
|
| - P3 p3,
|
| - P4 p4,
|
| - P5 p5,
|
| - P6 p6,
|
| - P7 p7,
|
| - P8 p8)
|
| - : functor_(functor),
|
| - p1_(p1),
|
| - p2_(p2),
|
| - p3_(p3),
|
| - p4_(p4),
|
| - p5_(p5),
|
| - p6_(p6),
|
| - p7_(p7),
|
| - p8_(p8) {}
|
| - R operator()() const {
|
| - return functor_(p1_, p2_, p3_, p4_, p5_, p6_, p7_, p8_);
|
| + // Use sequence_generator (see template_util.h) to expand a Functor
|
| + // with 2 arguments to (std::get<0>(args_), std::get<1>(args_)), for
|
| + // instance.
|
| + template <int... S>
|
| + R CallFunction(sequence<S...>) const {
|
| + return functor_(std::get<S>(args_)...);
|
| }
|
|
|
| - private:
|
| FunctorT functor_;
|
| - typename rtc::remove_reference<P1>::type p1_;
|
| - typename rtc::remove_reference<P2>::type p2_;
|
| - typename rtc::remove_reference<P3>::type p3_;
|
| - typename rtc::remove_reference<P4>::type p4_;
|
| - typename rtc::remove_reference<P5>::type p5_;
|
| - typename rtc::remove_reference<P6>::type p6_;
|
| - typename rtc::remove_reference<P7>::type p7_;
|
| - typename rtc::remove_reference<P8>::type p8_;
|
| + typename std::tuple<typename std::remove_reference<Args>::type...> args_;
|
| };
|
|
|
| -#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5, P6, P7, P8)
|
| +#define FP_T(x) R (ObjectT::*x)(Args...)
|
|
|
| -template <class ObjectT,
|
| - class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5,
|
| - class P6,
|
| - class P7,
|
| - class P8>
|
| -MethodFunctor8<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7, P8> Bind(
|
| +template <class ObjectT, class R, typename... Args>
|
| +MethodFunctor<ObjectT, FP_T(NONAME), R, Args...> Bind(
|
| FP_T(method),
|
| ObjectT* object,
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2,
|
| - typename detail::identity<P3>::type p3,
|
| - typename detail::identity<P4>::type p4,
|
| - typename detail::identity<P5>::type p5,
|
| - typename detail::identity<P6>::type p6,
|
| - typename detail::identity<P7>::type p7,
|
| - typename detail::identity<P8>::type p8) {
|
| - return MethodFunctor8<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7,
|
| - P8>(method, object, p1, p2, p3, p4, p5, p6, p7, p8);
|
| + typename detail::identity<Args>::type... args) {
|
| + return MethodFunctor<ObjectT, FP_T(NONAME), R, Args...>(method, object,
|
| + args...);
|
| }
|
|
|
| #undef FP_T
|
| -#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5, P6, P7, P8) const
|
| +#define FP_T(x) R (ObjectT::*x)(Args...) const
|
|
|
| -template <class ObjectT,
|
| - class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5,
|
| - class P6,
|
| - class P7,
|
| - class P8>
|
| -MethodFunctor8<const ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7, P8>
|
| -Bind(FP_T(method),
|
| - const ObjectT* object,
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2,
|
| - typename detail::identity<P3>::type p3,
|
| - typename detail::identity<P4>::type p4,
|
| - typename detail::identity<P5>::type p5,
|
| - typename detail::identity<P6>::type p6,
|
| - typename detail::identity<P7>::type p7,
|
| - typename detail::identity<P8>::type p8) {
|
| - return MethodFunctor8<const ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6,
|
| - P7, P8>(method, object, p1, p2, p3, p4, p5, p6, p7, p8);
|
| +template <class ObjectT, class R, typename... Args>
|
| +MethodFunctor<const ObjectT, FP_T(NONAME), R, Args...> Bind(
|
| + FP_T(method),
|
| + const ObjectT* object,
|
| + typename detail::identity<Args>::type... args) {
|
| + return MethodFunctor<const ObjectT, FP_T(NONAME), R, Args...>(method, object,
|
| + args...);
|
| }
|
|
|
| #undef FP_T
|
| -#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5, P6, P7, P8)
|
| +#define FP_T(x) R (ObjectT::*x)(Args...)
|
|
|
| -template <class ObjectT,
|
| - class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5,
|
| - class P6,
|
| - class P7,
|
| - class P8>
|
| -MethodFunctor8<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7, P8> Bind(
|
| +template <class ObjectT, class R, typename... Args>
|
| +MethodFunctor<ObjectT, FP_T(NONAME), R, Args...> Bind(
|
| FP_T(method),
|
| const scoped_refptr<ObjectT>& object,
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2,
|
| - typename detail::identity<P3>::type p3,
|
| - typename detail::identity<P4>::type p4,
|
| - typename detail::identity<P5>::type p5,
|
| - typename detail::identity<P6>::type p6,
|
| - typename detail::identity<P7>::type p7,
|
| - typename detail::identity<P8>::type p8) {
|
| - return MethodFunctor8<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7,
|
| - P8>(method, object.get(), p1, p2, p3, p4, p5, p6, p7,
|
| - p8);
|
| -}
|
| -
|
| -#undef FP_T
|
| -#define FP_T(x) R (*x)(P1, P2, P3, P4, P5, P6, P7, P8)
|
| -
|
| -template <class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5,
|
| - class P6,
|
| - class P7,
|
| - class P8>
|
| -Functor8<FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7, P8> Bind(
|
| - FP_T(function),
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2,
|
| - typename detail::identity<P3>::type p3,
|
| - typename detail::identity<P4>::type p4,
|
| - typename detail::identity<P5>::type p5,
|
| - typename detail::identity<P6>::type p6,
|
| - typename detail::identity<P7>::type p7,
|
| - typename detail::identity<P8>::type p8) {
|
| - return Functor8<FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7, P8>(
|
| - function, p1, p2, p3, p4, p5, p6, p7, p8);
|
| -}
|
| -
|
| -#undef FP_T
|
| -
|
| -template <class ObjectT,
|
| - class MethodT,
|
| - class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5,
|
| - class P6,
|
| - class P7,
|
| - class P8,
|
| - class P9>
|
| -class MethodFunctor9 {
|
| - public:
|
| - MethodFunctor9(MethodT method,
|
| - ObjectT* object,
|
| - P1 p1,
|
| - P2 p2,
|
| - P3 p3,
|
| - P4 p4,
|
| - P5 p5,
|
| - P6 p6,
|
| - P7 p7,
|
| - P8 p8,
|
| - P9 p9)
|
| - : method_(method),
|
| - object_(object),
|
| - p1_(p1),
|
| - p2_(p2),
|
| - p3_(p3),
|
| - p4_(p4),
|
| - p5_(p5),
|
| - p6_(p6),
|
| - p7_(p7),
|
| - p8_(p8),
|
| - p9_(p9) {}
|
| - R operator()() const {
|
| - return (object_->*method_)(p1_, p2_, p3_, p4_, p5_, p6_, p7_, p8_, p9_);
|
| - }
|
| -
|
| - private:
|
| - MethodT method_;
|
| - typename detail::PointerType<ObjectT>::type object_;
|
| - typename rtc::remove_reference<P1>::type p1_;
|
| - typename rtc::remove_reference<P2>::type p2_;
|
| - typename rtc::remove_reference<P3>::type p3_;
|
| - typename rtc::remove_reference<P4>::type p4_;
|
| - typename rtc::remove_reference<P5>::type p5_;
|
| - typename rtc::remove_reference<P6>::type p6_;
|
| - typename rtc::remove_reference<P7>::type p7_;
|
| - typename rtc::remove_reference<P8>::type p8_;
|
| - typename rtc::remove_reference<P9>::type p9_;
|
| -};
|
| -
|
| -template <class FunctorT,
|
| - class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5,
|
| - class P6,
|
| - class P7,
|
| - class P8,
|
| - class P9>
|
| -class Functor9 {
|
| - public:
|
| - Functor9(const FunctorT& functor,
|
| - P1 p1,
|
| - P2 p2,
|
| - P3 p3,
|
| - P4 p4,
|
| - P5 p5,
|
| - P6 p6,
|
| - P7 p7,
|
| - P8 p8,
|
| - P9 p9)
|
| - : functor_(functor),
|
| - p1_(p1),
|
| - p2_(p2),
|
| - p3_(p3),
|
| - p4_(p4),
|
| - p5_(p5),
|
| - p6_(p6),
|
| - p7_(p7),
|
| - p8_(p8),
|
| - p9_(p9) {}
|
| - R operator()() const {
|
| - return functor_(p1_, p2_, p3_, p4_, p5_, p6_, p7_, p8_, p9_);
|
| - }
|
| -
|
| - private:
|
| - FunctorT functor_;
|
| - typename rtc::remove_reference<P1>::type p1_;
|
| - typename rtc::remove_reference<P2>::type p2_;
|
| - typename rtc::remove_reference<P3>::type p3_;
|
| - typename rtc::remove_reference<P4>::type p4_;
|
| - typename rtc::remove_reference<P5>::type p5_;
|
| - typename rtc::remove_reference<P6>::type p6_;
|
| - typename rtc::remove_reference<P7>::type p7_;
|
| - typename rtc::remove_reference<P8>::type p8_;
|
| - typename rtc::remove_reference<P9>::type p9_;
|
| -};
|
| -
|
| -#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5, P6, P7, P8, P9)
|
| -
|
| -template <class ObjectT,
|
| - class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5,
|
| - class P6,
|
| - class P7,
|
| - class P8,
|
| - class P9>
|
| -MethodFunctor9<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7, P8, P9>
|
| -Bind(FP_T(method),
|
| - ObjectT* object,
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2,
|
| - typename detail::identity<P3>::type p3,
|
| - typename detail::identity<P4>::type p4,
|
| - typename detail::identity<P5>::type p5,
|
| - typename detail::identity<P6>::type p6,
|
| - typename detail::identity<P7>::type p7,
|
| - typename detail::identity<P8>::type p8,
|
| - typename detail::identity<P9>::type p9) {
|
| - return MethodFunctor9<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7,
|
| - P8, P9>(method, object, p1, p2, p3, p4, p5, p6, p7, p8,
|
| - p9);
|
| -}
|
| -
|
| -#undef FP_T
|
| -#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5, P6, P7, P8, P9) const
|
| -
|
| -template <class ObjectT,
|
| - class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5,
|
| - class P6,
|
| - class P7,
|
| - class P8,
|
| - class P9>
|
| -MethodFunctor9<const ObjectT,
|
| - FP_T(NONAME),
|
| - R,
|
| - P1,
|
| - P2,
|
| - P3,
|
| - P4,
|
| - P5,
|
| - P6,
|
| - P7,
|
| - P8,
|
| - P9>
|
| -Bind(FP_T(method),
|
| - const ObjectT* object,
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2,
|
| - typename detail::identity<P3>::type p3,
|
| - typename detail::identity<P4>::type p4,
|
| - typename detail::identity<P5>::type p5,
|
| - typename detail::identity<P6>::type p6,
|
| - typename detail::identity<P7>::type p7,
|
| - typename detail::identity<P8>::type p8,
|
| - typename detail::identity<P9>::type p9) {
|
| - return MethodFunctor9<const ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6,
|
| - P7, P8, P9>(method, object, p1, p2, p3, p4, p5, p6, p7,
|
| - p8, p9);
|
| -}
|
| -
|
| -#undef FP_T
|
| -#define FP_T(x) R (ObjectT::*x)(P1, P2, P3, P4, P5, P6, P7, P8, P9)
|
| -
|
| -template <class ObjectT,
|
| - class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5,
|
| - class P6,
|
| - class P7,
|
| - class P8,
|
| - class P9>
|
| -MethodFunctor9<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7, P8, P9>
|
| -Bind(FP_T(method),
|
| - const scoped_refptr<ObjectT>& object,
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2,
|
| - typename detail::identity<P3>::type p3,
|
| - typename detail::identity<P4>::type p4,
|
| - typename detail::identity<P5>::type p5,
|
| - typename detail::identity<P6>::type p6,
|
| - typename detail::identity<P7>::type p7,
|
| - typename detail::identity<P8>::type p8,
|
| - typename detail::identity<P9>::type p9) {
|
| - return MethodFunctor9<ObjectT, FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7,
|
| - P8, P9>(method, object.get(), p1, p2, p3, p4, p5, p6,
|
| - p7, p8, p9);
|
| + typename detail::identity<Args>::type... args) {
|
| + return MethodFunctor<ObjectT, FP_T(NONAME), R, Args...>(method, object.get(),
|
| + args...);
|
| }
|
|
|
| #undef FP_T
|
| -#define FP_T(x) R (*x)(P1, P2, P3, P4, P5, P6, P7, P8, P9)
|
| +#define FP_T(x) R (*x)(Args...)
|
|
|
| -template <class R,
|
| - class P1,
|
| - class P2,
|
| - class P3,
|
| - class P4,
|
| - class P5,
|
| - class P6,
|
| - class P7,
|
| - class P8,
|
| - class P9>
|
| -Functor9<FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7, P8, P9> Bind(
|
| +template <class R, typename... Args>
|
| +Functor<FP_T(NONAME), R, Args...> Bind(
|
| FP_T(function),
|
| - typename detail::identity<P1>::type p1,
|
| - typename detail::identity<P2>::type p2,
|
| - typename detail::identity<P3>::type p3,
|
| - typename detail::identity<P4>::type p4,
|
| - typename detail::identity<P5>::type p5,
|
| - typename detail::identity<P6>::type p6,
|
| - typename detail::identity<P7>::type p7,
|
| - typename detail::identity<P8>::type p8,
|
| - typename detail::identity<P9>::type p9) {
|
| - return Functor9<FP_T(NONAME), R, P1, P2, P3, P4, P5, P6, P7, P8, P9>(
|
| - function, p1, p2, p3, p4, p5, p6, p7, p8, p9);
|
| + typename detail::identity<Args>::type... args) {
|
| + return Functor<FP_T(NONAME), R, Args...>(function, args...);
|
| }
|
|
|
| #undef FP_T
|
|
|