Index: talk/app/webrtc/proxy.h |
diff --git a/talk/app/webrtc/proxy.h b/talk/app/webrtc/proxy.h |
index 76a5c1eff2819e398983143f2c5e2fbbf452100e..d0a4673e3545e0593efad9ab05599d0909e1a819 100644 |
--- a/talk/app/webrtc/proxy.h |
+++ b/talk/app/webrtc/proxy.h |
@@ -81,6 +81,11 @@ class ReturnType { |
void Invoke(C* c, M m, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) { |
r_ = (c->*m)(a1, a2, a3, a4, a5); |
} |
+ template<typename C, typename M, typename T1, typename T2, typename T3, |
+ typename T4, typename T5, typename T6> |
+ void Invoke(C* c, M m, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) { |
+ r_ = (c->*m)(a1, a2, a3, a4, a5, a6); |
+ } |
R value() { return r_; } |
@@ -312,6 +317,36 @@ class MethodCall5 : public rtc::Message, |
T5 a5_; |
}; |
+template <typename C, typename R, typename T1, typename T2, typename T3, |
+ typename T4, typename T5, typename T6> |
+class MethodCall6 : public rtc::Message, |
+ public rtc::MessageHandler { |
+ public: |
+ typedef R (C::*Method)(T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6); |
+ MethodCall6(C* c, Method m, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) |
+ : c_(c), m_(m), a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6) {} |
+ |
+ R Marshal(rtc::Thread* t) { |
+ internal::SynchronousMethodCall(this).Invoke(t); |
+ return r_.value(); |
+ } |
+ |
+ private: |
+ void OnMessage(rtc::Message*) { |
+ r_.Invoke(c_, m_, a1_, a2_, a3_, a4_, a5_, a6_); |
+ } |
+ |
+ C* c_; |
+ Method m_; |
+ ReturnType<R> r_; |
+ T1 a1_; |
+ T2 a2_; |
+ T3 a3_; |
+ T4 a4_; |
+ T5 a5_; |
+ T6 a6_; |
+}; |
+ |
#define BEGIN_PROXY_MAP(c) \ |
class c##Proxy : public c##Interface { \ |
protected: \ |
@@ -377,6 +412,13 @@ class MethodCall5 : public rtc::Message, |
return call.Marshal(owner_thread_); \ |
} |
+#define PROXY_METHOD6(r, method, t1, t2, t3, t4, t5, t6) \ |
+ r method(t1 a1, t2 a2, t3 a3, t4 a4, t5 a5, t6 a6) override { \ |
+ MethodCall6<C, r, t1, t2, t3, t4, t5, t6> call(c_.get(), &C::method, a1, \ |
+ a2, a3, a4, a5, a6); \ |
+ return call.Marshal(owner_thread_); \ |
+ } |
+ |
#define END_PROXY() \ |
private:\ |
void Release_s() {\ |