#define SIMCALL_ENUM(type, ...)\
type
+/* generate the strings name from the enumeration values */
+#define SIMCALL_STRING_TYPE(type, name, answer, res, ...)\
+ [type] = STRINGIFY(type)
+
/* generate strings from the enumeration values */
#define SIMCALL_TYPE(type, name, answer, res, ...)\
[type] = STRINGIFY(MAP(SIMCALL_FORMAT, __VA_ARGS__))
SIMCALL_FUNC_RETURN(res)\
}
-/* generate the simcalls prototypes functions */
-#define VOID_IF_EMPTY(...) GET_CLEAN(,##__VA_ARGS__,,,,,,,,,,,void)
-#define SIMCALL_FUNC_PROTO(type, name, answer, res, ...)\
- inline static SIMCALL_FUNC_RETURN_TYPE(res) simcall_BODY_##name(VOID_IF_EMPTY(__VA_ARGS__) MAP(SIMCALL_ARG, ##__VA_ARGS__));
-
-
/* generate a comma if there is an argument*/
#define WITHOUT_COMMA
#define WITH_COMMA ,
#define WITH_ANSWER(...) __VA_ARGS__
#define WITHOUT_ANSWER(...)
#define SIMCALL_CASE(type, name, answer, res, ...)\
- case type:;\
+ case type:\
SIMCALL_RESULT_BEGIN(answer, res) SIMIX_pre_ ## name(simcall MAYBE_COMMA(__VA_ARGS__) MAP(SIMCALL_CASE_PARAM, ##__VA_ARGS__));\
SIMCALL_RESULT_END(answer, res)\
break;
/* generate the simcalls args getter/setter */
#define SIMCALL_ARG_GETSET_(i, name, v) \
- inline SIMCALL_FUNC_RETURN_TYPE(v) SIMCALL_GS_FUNC(SIMCALL_GS_SC_NAME(name), get, SIMCALL_GS_ARG_NAME(v))(smx_simcall_t simcall){\
+ static inline SIMCALL_FUNC_RETURN_TYPE(v) SIMCALL_GS_FUNC(SIMCALL_GS_SC_NAME(name), get, SIMCALL_GS_ARG_NAME(v))(smx_simcall_t simcall){\
return simcall->args[i].SIMCALL_FIELD_ v ;\
}\
- inline void SIMCALL_GS_FUNC(SIMCALL_GS_SC_NAME(name), set, SIMCALL_GS_ARG_NAME(v))(smx_simcall_t simcall, SIMCALL_ARG_ v){\
+ static inline void SIMCALL_GS_FUNC(SIMCALL_GS_SC_NAME(name), set, SIMCALL_GS_ARG_NAME(v))(smx_simcall_t simcall, SIMCALL_ARG_ v){\
simcall->args[i].SIMCALL_FIELD_ v = SIMCALL_NAME_ v ;\
}
#define SIMCALL_ARG_GETSET(type, name, answer, res, ...)\
MAP_WITH_DEFAULT_ARGS(SIMCALL_ARG_GETSET_, (name), ##__VA_ARGS__)
-/* generate the simcalls args getter/setter protos*/
-#define SIMCALL_ARG_GETSET_PROTO_(i, name, v) \
- inline SIMCALL_FUNC_RETURN_TYPE(v) SIMCALL_GS_FUNC(SIMCALL_GS_SC_NAME(name), get, SIMCALL_GS_ARG_NAME(v))(smx_simcall_t simcall);\
- inline void SIMCALL_GS_FUNC(SIMCALL_GS_SC_NAME(name), set, SIMCALL_GS_ARG_NAME(v))(smx_simcall_t simcall, SIMCALL_ARG_ v);
-
-#define SIMCALL_ARG_GETSET_PROTO(type, name, answer, res, ...)\
- MAP_WITH_DEFAULT_ARGS(SIMCALL_ARG_GETSET_PROTO_, (name), ##__VA_ARGS__)
-
/* generate the simcalls result getter/setter */
#define SIMCALL_WITH_RES_GETSET(name, v) \
- inline SIMCALL_FUNC_RETURN_TYPE(v) SIMCALL_GS_FUNC(SIMCALL_GS_SC_NAME((name)), get, SIMCALL_GS_ARG_NAME(v))(smx_simcall_t simcall){\
+ static inline SIMCALL_FUNC_RETURN_TYPE(v) SIMCALL_GS_FUNC(SIMCALL_GS_SC_NAME((name)), get, SIMCALL_GS_ARG_NAME(v))(smx_simcall_t simcall){\
return simcall->result.SIMCALL_FIELD_ v ;\
}\
- inline void SIMCALL_GS_FUNC(SIMCALL_GS_SC_NAME((name)), set, SIMCALL_GS_ARG_NAME(v))(smx_simcall_t simcall, SIMCALL_ARG_ v){\
+ static inline void SIMCALL_GS_FUNC(SIMCALL_GS_SC_NAME((name)), set, SIMCALL_GS_ARG_NAME(v))(smx_simcall_t simcall, SIMCALL_ARG_ v){\
simcall->result.SIMCALL_FIELD_ v = SIMCALL_NAME_ v ;\
}
#define SIMCALL_WITHOUT_RES_GETSET(name, v)
typedef int (*simix_match_func_t)(void *, void *, smx_action_t);
typedef void (*simix_clean_func_t)(void *);
-/**
- * \brief Prototypes of SIMIX
- */
-SIMCALL_LIST(SIMCALL_FUNC_PROTO, SIMCALL_SEP_NOTHING)
-
-
/* Pack all possible scalar types in an union */
union u_smx_scalar {
char c;
};
} s_smx_simcall_t, *smx_simcall_t;
-SIMCALL_LIST(SIMCALL_RES_GETSET_PROTO, SIMCALL_SEP_NOTHING)
-SIMCALL_LIST(SIMCALL_ARG_GETSET_PROTO, SIMCALL_SEP_NOTHING)
+SIMCALL_LIST(SIMCALL_RES_GETSET, SIMCALL_SEP_NOTHING)
+SIMCALL_LIST(SIMCALL_ARG_GETSET, SIMCALL_SEP_NOTHING)
/******************************** General *************************************/