template<class R>
int call_m(unsigned int proc, marshall &req, R & r, TO to);
- template<class R>
- int call(unsigned int proc, R & r, TO to = to_max);
- template<class R, class A1>
- int call(unsigned int proc, const A1 & a1, R & r, TO to = to_max);
- template<class R, class A1, class A2>
- int call(unsigned int proc, const A1 & a1, const A2 & a2, R & r,
- TO to = to_max);
- template<class R, class A1, class A2, class A3>
- int call(unsigned int proc, const A1 & a1, const A2 & a2, const A3 & a3,
- R & r, TO to = to_max);
- template<class R, class A1, class A2, class A3, class A4>
- int call(unsigned int proc, const A1 & a1, const A2 & a2, const A3 & a3,
- const A4 & a4, R & r, TO to = to_max);
- template<class R, class A1, class A2, class A3, class A4, class A5>
- int call(unsigned int proc, const A1 & a1, const A2 & a2, const A3 & a3,
- const A4 & a4, const A5 & a5, R & r, TO to = to_max);
- template<class R, class A1, class A2, class A3, class A4, class A5,
- class A6>
- int call(unsigned int proc, const A1 & a1, const A2 & a2, const A3 & a3,
- const A4 & a4, const A5 & a5, const A6 & a6,
- R & r, TO to = to_max);
- template<class R, class A1, class A2, class A3, class A4, class A5,
- class A6, class A7>
- int call(unsigned int proc, const A1 & a1, const A2 & a2, const A3 & a3,
- const A4 & a4, const A5 & a5, const A6 &a6, const A7 &a7,
- R & r, TO to = to_max);
+ template<class R, typename ...Args>
+ inline int call(unsigned int proc, R & r, const Args&... args);
+ template<class R, typename ...Args>
+ inline int call_timeout(unsigned int proc, TO to, R & r, const Args&... args);
};
template<class R> int
rpcc::call_m(unsigned int proc, marshall &req, R & r, TO to)
{
- unmarshall u;
- int intret = call1(proc, req, u, to);
- if (intret < 0) return intret;
- u >> r;
- if(u.okdone() != true) {
- fprintf(stderr, "rpcc::call_m: failed to unmarshall the reply."
- "You are probably calling RPC 0x%x with wrong return "
- "type.\n", proc);
- VERIFY(0);
- return rpc_const::unmarshal_reply_failure;
- }
- return intret;
-}
-
-template<class R> int
-rpcc::call(unsigned int proc, R & r, TO to)
-{
- marshall m;
- return call_m(proc, m, r, to);
-}
-
-template<class R, class A1> int
-rpcc::call(unsigned int proc, const A1 & a1, R & r, TO to)
-{
- marshall m;
- m << a1;
- return call_m(proc, m, r, to);
-}
-
-template<class R, class A1, class A2> int
-rpcc::call(unsigned int proc, const A1 & a1, const A2 & a2,
- R & r, TO to)
-{
- marshall m;
- m << a1;
- m << a2;
- return call_m(proc, m, r, to);
-}
-
-template<class R, class A1, class A2, class A3> int
-rpcc::call(unsigned int proc, const A1 & a1, const A2 & a2,
- const A3 & a3, R & r, TO to)
-{
- marshall m;
- m << a1;
- m << a2;
- m << a3;
- return call_m(proc, m, r, to);
+ unmarshall u;
+ int intret = call1(proc, req, u, to);
+ if (intret < 0) return intret;
+ u >> r;
+ if (u.okdone() != true) {
+ fprintf(stderr, "rpcc::call_m: failed to unmarshall the reply."
+ "You are probably calling RPC 0x%x with wrong return "
+ "type.\n", proc);
+ VERIFY(0);
+ return rpc_const::unmarshal_reply_failure;
+ }
+ return intret;
}
-template<class R, class A1, class A2, class A3, class A4> int
-rpcc::call(unsigned int proc, const A1 & a1, const A2 & a2,
- const A3 & a3, const A4 & a4, R & r, TO to)
+template<class R, typename... Args> inline int
+rpcc::call(unsigned int proc, R & r, const Args&... args)
{
- marshall m;
- m << a1;
- m << a2;
- m << a3;
- m << a4;
- return call_m(proc, m, r, to);
-}
-
-template<class R, class A1, class A2, class A3, class A4, class A5> int
-rpcc::call(unsigned int proc, const A1 & a1, const A2 & a2,
- const A3 & a3, const A4 & a4, const A5 & a5, R & r, TO to)
-{
- marshall m;
- m << a1;
- m << a2;
- m << a3;
- m << a4;
- m << a5;
- return call_m(proc, m, r, to);
-}
-
-template<class R, class A1, class A2, class A3, class A4, class A5,
- class A6> int
-rpcc::call(unsigned int proc, const A1 & a1, const A2 & a2,
- const A3 & a3, const A4 & a4, const A5 & a5,
- const A6 & a6, R & r, TO to)
-{
- marshall m;
- m << a1;
- m << a2;
- m << a3;
- m << a4;
- m << a5;
- m << a6;
- return call_m(proc, m, r, to);
+ return call_timeout(proc, rpcc::to_max, r, args...);
}
-template<class R, class A1, class A2, class A3, class A4, class A5,
- class A6, class A7> int
-rpcc::call(unsigned int proc, const A1 & a1, const A2 & a2,
- const A3 & a3, const A4 & a4, const A5 & a5,
- const A6 & a6, const A7 & a7,
- R & r, TO to)
+template<class R, typename... Args> inline int
+rpcc::call_timeout(unsigned int proc, const rpcc::TO to, R & r, const Args&... args)
{
- marshall m;
- m << a1;
- m << a2;
- m << a3;
- m << a4;
- m << a5;
- m << a6;
- m << a7;
+ marshall m{args...};
return call_m(proc, m, r, to);
}