Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of mbed-rpc by
Diff: rpc.h
- 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
