--- /dev/null
+typedef struct s_smx_simcall {
+ e_smx_simcall_t call;
+ smx_process_t issuer;
+
+ union {
+
+ struct {
+ const char *name;
+ smx_host_t result;
+ } host_get_by_name;
+
+ struct {
+ smx_host_t host;
+ const char* result;
+ } host_get_name;
+
+ struct {
+ smx_host_t host;
+ xbt_dict_t result;
+ } host_get_properties;
+
+ struct {
+ smx_host_t host;
+ double result;
+ } host_get_speed;
+
+ struct {
+ smx_host_t host;
+ double result;
+ } host_get_available_speed;
+
+ struct {
+ smx_host_t host;
+ int result;
+ } host_get_state;
+
+ struct {
+ smx_host_t host;
+ void* result;
+ } host_get_data;
+
+ struct {
+ smx_host_t host;
+ void* data;
+ } host_set_data;
+
+ struct {
+ const char* name;
+ smx_host_t host;
+ double computation_amount;
+ double priority;
+ smx_action_t result;
+ } host_execute;
+
+ struct {
+ const char *name;
+ int host_nb;
+ smx_host_t *host_list;
+ double *computation_amount;
+ double *communication_amount;
+ double amount;
+ double rate;
+ smx_action_t result;
+ } host_parallel_execute;
+
+ struct {
+ smx_action_t execution;
+ } host_execution_destroy;
+
+ struct {
+ smx_action_t execution;
+ } host_execution_cancel;
+
+ struct {
+ smx_action_t execution;
+ double result;
+ } host_execution_get_remains;
+
+ struct {
+ smx_action_t execution;
+ e_smx_state_t result;
+ } host_execution_get_state;
+
+ struct {
+ smx_action_t execution;
+ double priority;
+ } host_execution_set_priority;
+
+ struct {
+ smx_action_t execution;
+ e_smx_state_t result;
+ } host_execution_wait;
+
+ struct {
+ smx_process_t *process;
+ const char *name;
+ xbt_main_func_t code;
+ void *data;
+ const char *hostname;
+ int argc;
+ char **argv;
+ xbt_dict_t properties;
+ } process_create;
+
+ struct {
+ smx_process_t process;
+ } process_kill;
+
+ struct {
+ smx_process_t process;
+ } process_cleanup;
+
+ struct {
+ smx_process_t process;
+ smx_host_t dest;
+ } process_change_host;
+
+ struct {
+ smx_process_t process;
+ } process_suspend;
+
+ struct {
+ smx_process_t process;
+ } process_resume;
+
+ struct {
+ int result;
+ } process_count;
+
+ struct {
+ smx_process_t process;
+ void* result;
+ } process_get_data;
+
+ struct {
+ smx_process_t process;
+ void* data;
+ } process_set_data;
+
+ struct {
+ smx_process_t process;
+ smx_host_t result;
+ } process_get_host;
+
+ struct {
+ smx_process_t process;
+ const char *result;
+ } process_get_name;
+
+ struct {
+ smx_process_t process;
+ int result;
+ } process_is_suspended;
+
+ struct {
+ smx_process_t process;
+ xbt_dict_t result;
+ } process_get_properties;
+
+ struct {
+ double duration;
+ e_smx_state_t result;
+ } process_sleep;
+
+ struct {
+ const char *name;
+ smx_rdv_t result;
+ } rdv_create;
+
+ struct {
+ smx_rdv_t rdv;
+ } rdv_destroy;
+
+ struct {
+ const char* name;
+ smx_rdv_t result;
+ } rdv_get_by_name;
+
+ struct {
+ smx_rdv_t rdv;
+ smx_host_t host;
+ unsigned int result;
+ } rdv_comm_count_by_host;
+
+ struct {
+ smx_rdv_t rdv;
+ smx_action_t result;
+ } rdv_get_head;
+
+ struct {
+ smx_rdv_t rdv;
+ double task_size;
+ double rate;
+ void *src_buff;
+ size_t src_buff_size;
+ int (*match_fun)(void *, void *);
+ void *data;
+ double timeout;
+ } comm_send;
+
+ struct {
+ smx_rdv_t rdv;
+ double task_size;
+ double rate;
+ void *src_buff;
+ size_t src_buff_size;
+ int (*match_fun)(void *, void *);
+ void (*clean_fun)(void *);
+ void *data;
+ int detached;
+ smx_action_t result;
+ } comm_isend;
+
+ struct {
+ smx_rdv_t rdv;
+ void *dst_buff;
+ size_t *dst_buff_size;
+ int (*match_fun)(void *, void *);
+ void *data;
+ double timeout;
+ } comm_recv;
+
+ struct {
+ smx_rdv_t rdv;
+ void *dst_buff;
+ size_t *dst_buff_size;
+ int (*match_fun)(void *, void *);
+ void *data;
+ smx_action_t result;
+ } comm_irecv;
+
+ struct {
+ smx_action_t comm;
+ } comm_destroy;
+
+ struct {
+ smx_action_t comm;
+ } comm_cancel;
+
+ struct {
+ xbt_dynar_t comms;
+ unsigned int result;
+ } comm_waitany;
+
+ struct {
+ smx_action_t comm;
+ double timeout;
+ } comm_wait;
+
+ struct {
+ smx_action_t comm;
+ int result;
+ } comm_test;
+
+ struct {
+ xbt_dynar_t comms;
+ int result;
+ } comm_testany;
+
+ struct {
+ smx_action_t comm;
+ double result;
+ } comm_get_remains;
+
+ struct {
+ smx_action_t comm;
+ e_smx_state_t result;
+ } comm_get_state;
+
+ struct {
+ smx_action_t comm;
+ void *result;
+ } comm_get_src_data;
+
+ struct {
+ smx_action_t comm;
+ void *result;
+ } comm_get_dst_data;
+
+ struct {
+ smx_action_t comm;
+ smx_process_t result;
+ } comm_get_src_proc;
+
+ struct {
+ smx_action_t comm;
+ smx_process_t result;
+ } comm_get_dst_proc;
+
+ struct {
+ smx_action_t comm;
+ int result;
+ } comm_is_latency_bounded;
+
+ struct {
+ smx_action_t action;
+ const char *category;
+ } set_category;
+
+ struct {
+ smx_mutex_t result;
+ } mutex_init;
+
+ struct {
+ smx_mutex_t mutex;
+ } mutex_lock;
+
+ struct {
+ smx_mutex_t mutex;
+ int result;
+ } mutex_trylock;
+
+ struct {
+ smx_mutex_t mutex;
+ } mutex_unlock;
+
+ struct {
+ smx_mutex_t mutex;
+ } mutex_destroy;
+
+ struct {
+ smx_cond_t result;
+ } cond_init;
+
+ struct {
+ smx_cond_t cond;
+ } cond_destroy;
+
+ struct {
+ smx_cond_t cond;
+ } cond_signal;
+
+ struct {
+ smx_cond_t cond;
+ smx_mutex_t mutex;
+ } cond_wait;
+
+ struct {
+ smx_cond_t cond;
+ smx_mutex_t mutex;
+ double timeout;
+ } cond_wait_timeout;
+
+ struct {
+ smx_cond_t cond;
+ } cond_broadcast;
+
+ struct {
+ int capacity;
+ smx_sem_t result;
+ } sem_init;
+
+ struct {
+ smx_sem_t sem;
+ } sem_destroy;
+
+ struct {
+ smx_sem_t sem;
+ } sem_release;
+
+ struct {
+ smx_sem_t sem;
+ int result;
+ } sem_would_block;
+
+ struct {
+ smx_sem_t sem;
+ } sem_acquire;
+
+ struct {
+ smx_sem_t sem;
+ double timeout;
+ } sem_acquire_timeout;
+
+ struct {
+ smx_sem_t sem;
+ int result;
+ } sem_get_capacity;
+
+ struct {
+ const char* storage;
+ void *ptr;
+ size_t size;
+ size_t nmemb;
+ m_file_t stream;
+ size_t result;
+ } file_read;
+
+ struct {
+ const char* storage;
+ const void *ptr;
+ size_t size;
+ size_t nmemb;
+ m_file_t stream;
+ size_t result;
+ } file_write;
+
+ struct {
+ const char* storage;
+ const char* path;
+ const char* mode;
+ m_file_t result;
+ } file_open;
+
+ struct {
+ const char* storage;
+ m_file_t fp;
+ int result;
+ } file_close;
+
+ struct {
+ const char* storage;
+ int fd;
+ //Next should be struct stat* buf
+ void* buf;
+ int result;
+ } file_stat;
+
+ };
+} s_smx_simcall_t, *smx_simcall_t;
+
+
+
+