#include "xbt/dict.h"
#include "xbt/config.h"
#include "xbt/function_types.h"
+#include "xbt/ex_interface.h"
/******************************** Datatypes ***********************************/
char *name; /**< @brief process name if any */
smx_host_t smx_host; /* the host on which the process is running */
smx_context_t context; /* the context that executes the scheduler function */
+ ex_ctx_t *exception;
int blocked : 1;
int suspended : 1;
int iwannadie : 1;
smx_mutex_t mutex; /* mutex on which the process is blocked */
smx_cond_t cond; /* cond on which the process is blocked */
+ smx_action_t waiting_action;
xbt_dict_t properties;
void *data; /* kept for compatibility, it should be replaced with moddata */
xbt_dict_t properties;
} s_smx_process_arg_t, *smx_process_arg_t;
+void SIMIX_create_maestro_process(void);
void SIMIX_process_empty_trash(void);
-void __SIMIX_process_schedule(smx_process_t process);
-void __SIMIX_process_yield(void);
+void SIMIX_process_schedule(smx_process_t process);
+void SIMIX_process_yield(void);
+ex_ctx_t *SIMIX_process_get_exception(void);
+void SIMIX_process_exception_terminate(xbt_ex_t * e);
/*************************** Mutex and Conditional ****************************/
} s_smx_cond_t;
+/******************************* Networking ***********************************/
+
+/** @brief Rendez-vous point datatype */
+typedef struct s_smx_rvpoint {
+ char *name;
+ smx_mutex_t read;
+ smx_mutex_t write;
+ xbt_fifo_t comm_fifo;
+} s_smx_rvpoint_t;
+
+typedef struct s_smx_comm {
+ smx_comm_type_t type;
+ smx_host_t src_host;
+ smx_host_t dst_host;
+ smx_rdv_t rdv;
+ smx_cond_t cond;
+ smx_action_t act;
+ void *data;
+ size_t data_size;
+ void *dest_buff;
+ size_t *dest_buff_size;
+ double rate;
+ double task_size;
+ int refcount;
+} s_smx_comm_t;
+
/********************************* Action *************************************/
+typedef enum {ready, ongoing, done, failed} smx_action_state_t;
+
/** @brief Action datatype
@ingroup m_datatypes_management_details */
typedef struct s_smx_action {
void __SIMIX_cond_wait(smx_cond_t cond);
void __SIMIX_cond_display_actions(smx_cond_t cond);
void __SIMIX_action_display_conditions(smx_action_t action);
-void __SIMIX_create_maestro_process(void);
/******************************** Context *************************************/
/* each context type must contain this macro at its begining -- OOP in C :/ */
#define SMX_CTX_BASE_T \
s_xbt_swag_hookup_t hookup; \
- ex_ctx_t *exception; \
xbt_main_func_t code; \
int argc; \
char **argv; \