7 #include <mpl/LinkArgs.h>
8 #include <preprocessor/params.h>
9 using mel::mpl::linkFunctor;
11 #include <mpl/ReturnAdaptor.h>
12 #include <tasking/Runnable.h>
19 #define GET_ARG_1( _1, ... ) _1
20 #define GET_ARG_2( _1, _2, ... ) _2
21 #define GET_ARG_3( _1, _2, _3, ... ) _3
22 #define GET_ARG_4( _1, _2, _3, _4, ... ) _4
23 #define GET_ARG_5( _1, _2, _3, _4, _5, ... ) _5
24 #define GET_ARG_6( _1, _2, _3, _4, _5, _6, ... ) _6
25 #define GET_ARG_7( _1, _2, _3, _4, _5, _6, _7, ... ) _7
26 #define GET_ARG_8( _1, _2, _3, _4, _5, _6, _7, _8, ... ) _8
27 #define GET_ARG_9( _1, _2, _3, _4, _5, _6, _7, _8, _9, ... ) _9
28 #define GET_ARG_10( _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, ... ) _10
30 #define CREATE_LINKER( TRet, function_name, args ) \
31 CREATE_LINKER_IMPL( MACRO_NUM_ARGS args, TRet, function_name, args )
32 #define CREATE_LINKER_IMPL( N, TRet, function_name, args ) \
33 CREATE_LINKER_IMPL_( N, TRet, function_name, args )
34 #define CREATE_LINKER_IMPL_( N, TRet, function_name, args ) \
35 CREATE_LINKER_N( N, TRet, function_name, args )
38 #define CREATE_LINKER_N( N, TRet, function_name, args ) \
39 CREATE_LINKER_N_( N, TRet, function_name, args )
40 #define CREATE_LINKER_N_( N, TRet, function_name, args ) \
41 CREATE_LINKER_##N( TRet, function_name, args )
42 #define CREATE_LINKER_0( TRet, function_name, args ) function_name
43 #define CREATE_LINKER_1( TRet, function_name, args ) \
44 linkFunctor<TRet, TYPELIST(), GET_ARG_1 args>( function_name, _1 )
46 #define CREATE_LINKER_2( TRet, function_name, args ) \
47 linkFunctor<TRet, TYPELIST(), GET_ARG_1 args, GET_ARG_2 args>( \
48 function_name, _1, _2 )
49 #define CREATE_LINKER_3( TRet, function_name, args ) \
50 linkFunctor<TRet, TYPELIST(), GET_ARG_1 args, GET_ARG_2 args, \
51 GET_ARG_3 args>( function_name, _1, _2, _3 )
52 #define CREATE_LINKER_4( TRet, function_name, args ) \
53 linkFunctor<TRet, TYPELIST(), GET_ARG_1 args, GET_ARG_2 args, \
54 GET_ARG_3 args, GET_ARG_4 args>( function_name, _1, _2, _3, \
56 #define CREATE_LINKER_5( TRet, function_name, args ) \
57 linkFunctor<TRet, TYPELIST(), GET_ARG_1 args, GET_ARG_2 args, \
58 GET_ARG_3 args, GET_ARG_4 args, GET_ARG_5 args>( \
59 function_name, _1, _2, _3, _4, _5 )
61 #define CREATE_LINKER_6( TRet, function_name, args ) \
62 linkFunctor<TRet, TYPELIST(), GET_ARG_1 args, GET_ARG_2 args, \
63 GET_ARG_3 args, GET_ARG_4 args, GET_ARG_5 args, \
64 GET_ARG_6 args>( function_name, _1, _2, _3, _4, _5, _6 )
65 #define CREATE_LINKER_7( TRet, function_name, args ) \
66 linkFunctor<TRet, TYPELIST(), GET_ARG_1 args, GET_ARG_2 args, \
67 GET_ARG_3 args, GET_ARG_4 args, GET_ARG_5 args, \
68 GET_ARG_6 args, GET_ARG_7 args>( function_name, _1, _2, _3, \
113 #define SYNCHRONIZED_STATIC( function_name, TRet, args, qualifiers, runnable ) \
114 static TRet function_name##_sync args qualifiers; \
115 static Future<TRet> function_name( MAKE_PARAMS args ) qualifiers \
117 return runnable->execute<TRet>( \
118 [CALL_PARAMS args]() qualifiers \
119 { return function_name##_sync( CALL_PARAMS args ); } ); \
143 #define SYNCHRONIZED_METHOD( function_name, TRet, args, qualifiers, runnable ) \
144 TRet function_name##_sync args qualifiers; \
145 Future<TRet> function_name( MAKE_PARAMS args ) qualifiers \
147 return runnable->execute<TRet>( \
148 [this, CALL_PARAMS args]() qualifiers \
149 { return function_name##_sync( CALL_PARAMS args ); } ); \
A class representing a "running" task, with added functionality to post events requesting execution o...
Definition: Runnable.h:183
Definition: Callback_Impl.h:11
Utilities on tasking, because lack of a better place...Some funcions are intended to be put in a cust...