George Jiglau / mbed-rpc

Fork of mbed-rpc by mbed official

Revision:
1:afe5fe95394f
Parent:
0:efe8172b4113
--- a/rpc.h	Tue Nov 20 17:23:59 2012 +0000
+++ b/rpc.h	Tue Feb 12 19:54:33 2013 +0000
@@ -44,9 +44,9 @@
  *  The RPC class for most things
  */
 class RPC {
-    
+
 public:
-    
+
     RPC(const char *name = NULL);
 
     virtual ~RPC();
@@ -69,7 +69,7 @@
      * > };
      */
     virtual const struct rpc_method *get_rpc_methods();
-    
+
     static bool call(const char *buf, char *result);
 
     /* Function lookup
@@ -108,7 +108,7 @@
         c->next = _classes;
         _classes = c;
     }
-    
+
     template<class C>
     static const char *construct() {
         RPC *p = new C();
@@ -143,6 +143,34 @@
         p->_from_construct = true;
         return p->_name;
     }
+    
+    template<class C, typename A1, typename A2, typename A3, typename A4, typename A5>
+    static const char *construct(A1 arg1, A2 arg2, A3 arg3, A4 arg4, A5 arg5) {
+        RPC *p = new C(arg1, arg2, arg3, arg4, arg5);
+        p->_from_construct = true;
+        return p->_name;
+    }
+    
+    template<class C, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6>
+    static const char *construct(A1 arg1, A2 arg2, A3 arg3, A4 arg4, A5 arg5, A6 arg6) {
+        RPC *p = new C(arg1, arg2, arg3, arg4, arg5, arg6);
+        p->_from_construct = true;
+        return p->_name;
+    }
+    
+    template<class C, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7>
+    static const char *construct(A1 arg1, A2 arg2, A3 arg3, A4 arg4, A5 arg5, A6 arg6, A7 arg7) {
+        RPC *p = new C(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
+        p->_from_construct = true;
+        return p->_name;
+    }
+    
+    template<class C, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8>
+    static const char *construct(A1 arg1, A2 arg2, A3 arg3, A4 arg4, A5 arg5, A6 arg6, A7 arg7, A8 arg8) {
+        RPC *p = new C(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
+        p->_from_construct = true;
+        return p->_name;
+    }
 };
 
 /* Macro MBED_OBJECT_NAME_MAX
@@ -176,34 +204,103 @@
  */
 template<class T, typename A1, void(T::*member)(A1)>
 void rpc_method_caller(RPC *this_ptr, Arguments *arguments, Reply *result) {
-    A1 arg1 = arguments->getArg<A1>();
-    
-    (static_cast<T*>(this_ptr)->*member)(arg1);
+    (static_cast<T*>(this_ptr)->*member)(
+        arguments->getArg<A1>()
+    );
 }
 
 /* Function rpc_method_caller
  */
 template<class T, typename A1, typename A2, void(T::*member)(A1, A2)>
 void rpc_method_caller(RPC *this_ptr, Arguments *arguments, Reply *result) {
-    A1 arg1 = arguments->getArg<A1>();
-    A2 arg2 = arguments->getArg<A2>();
-    
-    (static_cast<T*>(this_ptr)->*member)(arg1, arg2);
+    (static_cast<T*>(this_ptr)->*member)(
+        arguments->getArg<A1>(),
+        arguments->getArg<A2>()
+    );
 }
 
 /* Function rpc_method_caller
  */
 template<class T, typename A1, typename A2, typename A3, void(T::*member)(A1, A2, A3)>
 void rpc_method_caller(RPC *this_ptr, Arguments *arguments, Reply *result) {
-    A1 arg1 = arguments->getArg<A1>();
-    A2 arg2 = arguments->getArg<A2>();
-    A3 arg3 = arguments->getArg<A3>();
-    
-    (static_cast<T*>(this_ptr)->*member)(arg1, arg2, arg3);
+    (static_cast<T*>(this_ptr)->*member)(
+        arguments->getArg<A1>(),
+        arguments->getArg<A2>(),
+        arguments->getArg<A3>()
+    );
+}
+
+/* Function rpc_method_caller
+ */
+template<class T, typename A1, typename A2, typename A3, typename A4, void(T::*member)(A1, A2, A3, A4)>
+void rpc_method_caller(RPC *this_ptr, Arguments *arguments, Reply *result) {
+    (static_cast<T*>(this_ptr)->*member)(
+        arguments->getArg<A1>(),
+        arguments->getArg<A2>(),
+        arguments->getArg<A3>(),
+        arguments->getArg<A4>()
+    );
+}
+
+/* Function rpc_method_caller
+ */
+template<class T, typename A1, typename A2, typename A3, typename A4, typename A5, void(T::*member)(A1, A2, A3, A4, A5)>
+void rpc_method_caller(RPC *this_ptr, Arguments *arguments, Reply *result) {
+    (static_cast<T*>(this_ptr)->*member)(
+        arguments->getArg<A1>(),
+        arguments->getArg<A2>(),
+        arguments->getArg<A3>(),
+        arguments->getArg<A4>(),
+        arguments->getArg<A5>()
+    );
 }
 
 /* Function rpc_method_caller
  */
+template<class T, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, void(T::*member)(A1, A2, A3, A4, A5, A6)>
+void rpc_method_caller(RPC *this_ptr, Arguments *arguments, Reply *result) {
+    (static_cast<T*>(this_ptr)->*member)(
+        arguments->getArg<A1>(),
+        arguments->getArg<A2>(),
+        arguments->getArg<A3>(),
+        arguments->getArg<A4>(),
+        arguments->getArg<A5>(),
+        arguments->getArg<A6>()
+    );
+}
+
+/* Function rpc_method_caller
+ */
+template<class T, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, void(T::*member)(A1, A2, A3, A4, A5, A6, A7)>
+void rpc_method_caller(RPC *this_ptr, Arguments *arguments, Reply *result) {
+    (static_cast<T*>(this_ptr)->*member)(
+        arguments->getArg<A1>(),
+        arguments->getArg<A2>(),
+        arguments->getArg<A3>(),
+        arguments->getArg<A4>(),
+        arguments->getArg<A5>(),
+        arguments->getArg<A6>(),
+        arguments->getArg<A7>()
+    );
+}
+
+/* Function rpc_method_caller
+ */
+template<class T, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, void(T::*member)(A1, A2, A3, A4, A5, A6, A7, A8)>
+void rpc_method_caller(RPC *this_ptr, Arguments *arguments, Reply *result) {
+    (static_cast<T*>(this_ptr)->*member)(
+        arguments->getArg<A1>(),
+        arguments->getArg<A2>(),
+        arguments->getArg<A3>(),
+        arguments->getArg<A4>(),
+        arguments->getArg<A5>(),
+        arguments->getArg<A6>(),
+        arguments->getArg<A7>(),
+        arguments->getArg<A8>()
+    );
+}
+/* Function rpc_method_caller
+ */
 template<typename R, class T, R(T::*member)()>
 void rpc_method_caller(RPC *this_ptr, Arguments *arguments, Reply *result) {
     R res = (static_cast<T*>(this_ptr)->*member)();
@@ -214,9 +311,9 @@
  */
 template<typename R, class T, typename A1, R(T::*member)(A1)>
 void rpc_method_caller(RPC *this_ptr, Arguments *arguments, Reply *result) {
-    A1 arg1 = arguments->getArg<A1>();
-    
-    R res = (static_cast<T*>(this_ptr)->*member)(arg1);
+    R res = (static_cast<T*>(this_ptr)->*member)(
+        arguments->getArg<A1>()
+    );
     result->putData<R>(res);
 }
 
@@ -224,10 +321,10 @@
  */
 template<typename R, class T, typename A1, typename A2, R(T::*member)(A1, A2)>
 void rpc_method_caller(RPC *this_ptr, Arguments *arguments, Reply *result) {
-    A1 arg1 = arguments->getArg<A1>();
-    A2 arg2 = arguments->getArg<A2>();
-    
-    R res = (static_cast<T*>(this_ptr)->*member)(arg1, arg2);
+    R res = (static_cast<T*>(this_ptr)->*member)(
+        arguments->getArg<A1>(),
+        arguments->getArg<A2>()
+    );
     result->putData<R>(res);
 }
 
@@ -235,11 +332,89 @@
  */
 template<typename R, class T, typename A1, typename A2, typename A3, R(T::*member)(A1, A2, A3)>
 void rpc_method_caller(RPC *this_ptr, Arguments *arguments, Reply *result) {
-    A1 arg1 = arguments->getArg<A1>();
-    A2 arg2 = arguments->getArg<A2>();
-    A3 arg3 = arguments->getArg<A3>();
-    
-    R res = (static_cast<T*>(this_ptr)->*member)(arg1, arg2, arg3);
+    R res = (static_cast<T*>(this_ptr)->*member)(
+        arguments->getArg<A1>(),
+        arguments->getArg<A2>(),
+        arguments->getArg<A3>()
+    );
+    result->putData<R>(res);
+}
+
+
+/* Function rpc_method_caller
+ */
+template<typename R, class T, typename A1, typename A2, typename A3, typename A4, R(T::*member)(A1, A2, A3, A4)>
+void rpc_method_caller(RPC *this_ptr, Arguments *arguments, Reply *result) {
+    R res = (static_cast<T*>(this_ptr)->*member)(
+        arguments->getArg<A1>(),
+        arguments->getArg<A2>(),
+        arguments->getArg<A3>(),
+        arguments->getArg<A4>()
+    );
+    result->putData<R>(res);
+}
+
+
+/* Function rpc_method_caller
+ */
+template<typename R, class T, typename A1, typename A2, typename A3, typename A4, typename A5, R(T::*member)(A1, A2, A3, A4, A5)>
+void rpc_method_caller(RPC *this_ptr, Arguments *arguments, Reply *result) {
+    R res = (static_cast<T*>(this_ptr)->*member)(
+        arguments->getArg<A1>(),
+        arguments->getArg<A2>(),
+        arguments->getArg<A3>(),
+        arguments->getArg<A4>(),
+        arguments->getArg<A5>()
+    );
+    result->putData<R>(res);
+}
+
+
+/* Function rpc_method_caller
+ */
+template<typename R, class T, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, R(T::*member)(A1, A2, A3, A4, A5, A6)>
+void rpc_method_caller(RPC *this_ptr, Arguments *arguments, Reply *result) {
+    R res = (static_cast<T*>(this_ptr)->*member)(
+        arguments->getArg<A1>(),
+        arguments->getArg<A2>(),
+        arguments->getArg<A3>(),
+        arguments->getArg<A4>(),
+        arguments->getArg<A5>(),
+        arguments->getArg<A6>()
+    );
+    result->putData<R>(res);
+}
+
+/* Function rpc_method_caller
+ */
+template<typename R, class T, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, R(T::*member)(A1, A2, A3, A4, A5, A6, A7)>
+void rpc_method_caller(RPC *this_ptr, Arguments *arguments, Reply *result) {
+    R res = (static_cast<T*>(this_ptr)->*member)(
+        arguments->getArg<A1>(),
+        arguments->getArg<A2>(),
+        arguments->getArg<A3>(),
+        arguments->getArg<A4>(),
+        arguments->getArg<A5>(),
+        arguments->getArg<A6>(),
+        arguments->getArg<A7>()
+    );
+    result->putData<R>(res);
+}
+
+/* Function rpc_method_caller
+ */
+template<typename R, class T, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, R(T::*member)(A1, A2, A3, A4, A5, A6, A7, A8)>
+void rpc_method_caller(RPC *this_ptr, Arguments *arguments, Reply *result) {
+    R res = (static_cast<T*>(this_ptr)->*member)(
+        arguments->getArg<A1>(),
+        arguments->getArg<A2>(),
+        arguments->getArg<A3>(),
+        arguments->getArg<A4>(),
+        arguments->getArg<A5>(),
+        arguments->getArg<A6>(),
+        arguments->getArg<A7>(),
+        arguments->getArg<A8>()
+    );
     result->putData<R>(res);
 }
 
@@ -255,8 +430,9 @@
  */
 template<typename R, typename A1, R(*func)(A1)>
 void rpc_function_caller(Arguments *arguments, Reply *result) {
-    A1 arg1 = arguments->getArg<A1>();
-    R res = (*func)(arg1);
+    R res = (*func)(
+        arguments->getArg<A1>()
+    );
     result->putData<R>(res);
 }
 
@@ -264,10 +440,10 @@
  */
 template<typename R, typename A1, typename A2, R(*func)(A1, A2)>
 void rpc_function_caller(Arguments *arguments, Reply *result) {
-    A1 arg1 = arguments->getArg<A1>();
-    A2 arg2 = arguments->getArg<A2>();
-    
-    R res = (*func)(arg1, arg2);
+    R res = (*func)(
+        arguments->getArg<A1>(),
+        arguments->getArg<A2>()
+    );
     result->putData<R>(res);
 }
 
@@ -275,11 +451,11 @@
  */
 template<typename R, typename A1, typename A2, typename A3, R(*func)(A1, A2, A3)>
 void rpc_function_caller(Arguments *arguments, Reply *result) {
-    A1 arg1 = arguments->getArg<A1>();
-    A2 arg2 = arguments->getArg<A2>();
-    A3 arg3 = arguments->getArg<A3>();
-    
-    R res = (*func)(arg1, arg2, arg3);
+    R res = (*func)(
+        arguments->getArg<A1>(),
+        arguments->getArg<A2>(),
+        arguments->getArg<A3>()
+    );
     result->putData<R>(res);
 }
 
@@ -287,12 +463,77 @@
  */
 template<typename R, typename A1, typename A2, typename A3, typename A4, R(*func)(A1, A2, A3, A4)>
 void rpc_function_caller(Arguments *arguments, Reply *result) {
-    A1 arg1 = arguments->getArg<A1>();
-    A2 arg2 = arguments->getArg<A2>();
-    A3 arg3 = arguments->getArg<A3>();
-    A4 arg4 = arguments->getArg<A4>();
-    
-    R res = (*func)(arg1, arg2, arg3, arg4);
+    R res = (*func)(
+        arguments->getArg<A1>(),
+        arguments->getArg<A2>(),
+        arguments->getArg<A3>(),
+        arguments->getArg<A4>()
+    );
+    result->putData<R>(res);
+}
+
+
+/* Function rpc_function caller
+ */
+template<typename R, typename A1, typename A2, typename A3, typename A4, typename A5, R(*func)(A1, A2, A3, A4, A5)>
+void rpc_function_caller(Arguments *arguments, Reply *result) {
+    R res = (*func)(
+        arguments->getArg<A1>(),
+        arguments->getArg<A2>(),
+        arguments->getArg<A3>(),
+        arguments->getArg<A4>(),
+        arguments->getArg<A5>()
+    );
+    result->putData<R>(res);
+}
+
+
+/* Function rpc_function caller
+ */
+template<typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, R(*func)(A1, A2, A3, A4, A5, A6)>
+void rpc_function_caller(Arguments *arguments, Reply *result) {
+    R res = (*func)(
+        arguments->getArg<A1>(),
+        arguments->getArg<A2>(),
+        arguments->getArg<A3>(),
+        arguments->getArg<A4>(),
+        arguments->getArg<A5>(),
+        arguments->getArg<A6>()
+    );
+    result->putData<R>(res);
+}
+
+
+/* Function rpc_function caller
+ */
+template<typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, R(*func)(A1, A2, A3, A4, A5, A6, A7)>
+void rpc_function_caller(Arguments *arguments, Reply *result) {
+    R res = (*func)(
+        arguments->getArg<A1>(),
+        arguments->getArg<A2>(),
+        arguments->getArg<A3>(),
+        arguments->getArg<A4>(),
+        arguments->getArg<A5>(),
+        arguments->getArg<A6>(),
+        arguments->getArg<A7>()
+    );
+    result->putData<R>(res);
+}
+
+/* Function rpc_function caller
+ */
+template<typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, R(*func)(A1, A2, A3, A4, A5, A6, A7, A8)>
+void rpc_function_caller(Arguments *arguments, Reply *result) {
+    R res = (*func)(
+        arguments->getArg<A1>(),
+        arguments->getArg<A2>(),
+        arguments->getArg<A3>(),
+        arguments->getArg<A4>(),
+        arguments->getArg<A5>(),
+        arguments->getArg<A6>(),
+        arguments->getArg<A7>(),
+        arguments->getArg<A8>()
+    );
     result->putData<R>(res);
 }
 
@@ -316,4 +557,4 @@
 
 } // namespace mbed
 
-#endif
+#endif
\ No newline at end of file