3 ms·
I made it simpler (and slightly more portable ;-) ) : typedef void* (*f)(); extern void* apply(void* func, void** args, size_t argc) { switch
by ogoffart 14y ago
I made it simpler (and slightly more portable ;-) ) :
typedef void* (*f)();
extern void* apply(void* func, void** args, size_t argc) {
switch (argc) {
case 0: return ((f)(func))();
case 1: return ((f)(func))(args[0]);
case 2: return ((f)(func))(args[0], args[1]);
case 3: return ((f)(func))(args[0], args[1], args[2]);
case 4: return ((f)(func))(args[0], args[1], args[2], args[3]);
case 5: return ((f)(func))(args[0], args[1], args[2], args[3], args[4]);
case 6: return ((f)(func))(args[0], args[1], args[2], args[3], args[4], args[5]);
case 7: return ((f)(func))(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
case 8: return ((f)(func))(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);
case 9: return ((f)(func))(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8]);
/*...*/
}
}