Index: webrtc/base/bind.h |
diff --git a/webrtc/base/bind.h b/webrtc/base/bind.h |
index 2e3104edfd3c70f75df673217a56c73538724539..0db11747aaef6657a9f98d53a0da4faa11dd3f33 100644 |
--- a/webrtc/base/bind.h |
+++ b/webrtc/base/bind.h |
@@ -579,6 +579,142 @@ Bind(FP_T(function), |
} |
#undef FP_T |
+template <class ObjectT, |
+ class MethodT, |
+ class R, |
+ class P1, |
+ class P2, |
+ class P3, |
+ class P4, |
+ class P5, |
+ class P6> |
+class MethodFunctor6 { |
+ 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) {} |
+ R operator()() const { |
+ return (object_->*method_)(p1_, p2_, p3_, p4_, p5_, p6_); |
+ } |
+ |
+ private: |
+ MethodT method_; |
+ ObjectT* object_; |
+ P1 p1_; |
+ P2 p2_; |
+ P3 p3_; |
+ P4 p4_; |
+ P5 p5_; |
+ P6 p6_; |
+}; |
+ |
+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_; |
+ P1 p1_; |
+ P2 p2_; |
+ P3 p3_; |
+ P4 p4_; |
+ P5 p5_; |
+ P6 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 (*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<P5>::type p6) { |
+ return Functor6<FP_T(NONAME), R, P1, P2, P3, P4, P5, P6>(function, p1, p2, p3, |
+ p4, p5, p6); |
+} |
+ |
+#undef FP_T |
} // namespace rtc |