Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add macros to generate simcalls code
[simgrid.git] / src / simix / smx_network.c
index 82313fb..d6ad23c 100644 (file)
@@ -43,6 +43,9 @@ void SIMIX_network_exit(void)
 /*                           Rendez-Vous Points                               */
 /******************************************************************************/
 
+smx_rdv_t SIMIX_pre_rdv_create(smx_simcall_t simcall, const char *name){
+  return SIMIX_rdv_create(name);
+}
 smx_rdv_t SIMIX_rdv_create(const char *name)
 {
   /* two processes may have pushed the same rdv_create simcall at the same time */
@@ -63,6 +66,9 @@ smx_rdv_t SIMIX_rdv_create(const char *name)
   return rdv;
 }
 
+void SIMIX_pre_rdv_destroy(smx_simcall_t simcall, smx_rdv_t rdv){
+  return SIMIX_rdv_destroy(rdv);
+}
 void SIMIX_rdv_destroy(smx_rdv_t rdv)
 {
   if (rdv->name)
@@ -85,11 +91,17 @@ xbt_dict_t SIMIX_get_rdv_points()
   return rdv_points;
 }
 
+smx_rdv_t SIMIX_pre_rdv_get_by_name(smx_simcall_t simcall, const char *name){
+  return SIMIX_rdv_get_by_name(name);
+}
 smx_rdv_t SIMIX_rdv_get_by_name(const char *name)
 {
   return xbt_dict_get_or_null(rdv_points, name);
 }
 
+int SIMIX_pre_rdv_comm_count_by_host(smx_simcall_t simcall, smx_rdv_t rdv, smx_host_t host){
+  return SIMIX_rdv_comm_count_by_host(rdv, host);
+}
 int SIMIX_rdv_comm_count_by_host(smx_rdv_t rdv, smx_host_t host)
 {
   smx_action_t comm = NULL;
@@ -104,11 +116,17 @@ int SIMIX_rdv_comm_count_by_host(smx_rdv_t rdv, smx_host_t host)
   return count;
 }
 
+smx_action_t SIMIX_pre_rdv_get_head(smx_simcall_t simcall, smx_rdv_t rdv){
+  return SIMIX_rdv_get_head(rdv);
+}
 smx_action_t SIMIX_rdv_get_head(smx_rdv_t rdv)
 {
   return xbt_fifo_get_item_content(xbt_fifo_get_first_item(rdv->comm_fifo));
 }
 
+smx_process_t SIMIX_pre_rdv_get_receiver(smx_simcall_t simcall, smx_rdv_t rdv){
+  return SIMIX_rdv_get_receiver(rdv);
+}
 /**
  *  \brief get the receiver (process associated to the mailbox)
  *  \param rdv The rendez-vous point
@@ -119,12 +137,16 @@ smx_process_t SIMIX_rdv_get_receiver(smx_rdv_t rdv)
   return rdv->permanent_receiver;
 }
 
+void SIMIX_pre_rdv_set_receiver(smx_simcall_t simcall, smx_rdv_t rdv,
+                           smx_process_t process){
+  SIMIX_rdv_set_receiver(rdv, process);
+}
 /**
  *  \brief set the receiver of the rendez vous point to allow eager sends
  *  \param rdv The rendez-vous point
  *  \param process The receiving process
  */
-void SIMIX_rdv_set_receiver(smx_rdv_t rdv , smx_process_t process)
+void SIMIX_rdv_set_receiver(smx_rdv_t rdv, smx_process_t process)
 {
   rdv->permanent_receiver=process;
 }
@@ -261,6 +283,9 @@ smx_action_t SIMIX_comm_new(e_smx_comm_type_t type)
   return act;
 }
 
+void SIMIX_pre_comm_destroy(smx_simcall_t simcall, smx_action_t action){
+  SIMIX_comm_destroy(action);
+}
 /**
  *  \brief Destroy a communicate action
  *  \param action The communicate action to be destroyed
@@ -321,6 +346,27 @@ void SIMIX_comm_destroy_internal_actions(smx_action_t action)
   }
 }
 
+void SIMIX_pre_comm_send(smx_simcall_t simcall, smx_rdv_t rdv,
+                                  double task_size, double rate,
+                                  void *src_buff, size_t src_buff_size,
+                                  int (*match_fun)(void *, void *,smx_action_t),
+                                 void *data, double timeout){
+  smx_action_t comm = SIMIX_comm_isend(simcall->issuer, rdv, task_size, rate,
+                                      src_buff, src_buff_size, match_fun, NULL,
+                                      data, 0);
+  simcall->mc_value = 0;
+  SIMIX_pre_comm_wait(simcall, comm, timeout);
+}
+smx_action_t SIMIX_pre_comm_isend(smx_simcall_t simcall, smx_rdv_t rdv,
+                                  double task_size, double rate,
+                                  void *src_buff, size_t src_buff_size,
+                                  int (*match_fun)(void *, void *,smx_action_t),
+                                  void (*clean_fun)(void *), 
+                                 void *data, int detached){
+  return SIMIX_comm_isend(simcall->issuer, rdv, task_size, rate, src_buff,
+                         src_buff_size, match_fun, clean_fun, data, detached);
+
+}
 smx_action_t SIMIX_comm_isend(smx_process_t src_proc, smx_rdv_t rdv,
                               double task_size, double rate,
                               void *src_buff, size_t src_buff_size,
@@ -397,6 +443,22 @@ smx_action_t SIMIX_comm_isend(smx_process_t src_proc, smx_rdv_t rdv,
   return (detached ? NULL : other_action);
 }
 
+void SIMIX_pre_comm_recv(smx_simcall_t simcall, smx_rdv_t rdv,
+                                  void *dst_buff, size_t *dst_buff_size,
+                                  int (*match_fun)(void *, void *, smx_action_t),
+                                 void *data, double timeout){
+  smx_action_t comm = SIMIX_comm_irecv(simcall->issuer, rdv, dst_buff,
+                                      dst_buff_size, match_fun, data);
+  simcall->mc_value = 0;
+  SIMIX_pre_comm_wait(simcall, comm, timeout);
+}
+smx_action_t SIMIX_pre_comm_irecv(smx_simcall_t simcall, smx_rdv_t rdv,
+                                  void *dst_buff, size_t *dst_buff_size,
+                                  int (*match_fun)(void *, void *, smx_action_t),
+                                 void *data){
+  return SIMIX_comm_irecv(simcall->issuer, rdv, dst_buff, dst_buff_size,
+                         match_fun, data);
+}
 smx_action_t SIMIX_comm_irecv(smx_process_t dst_proc, smx_rdv_t rdv,
                               void *dst_buff, size_t *dst_buff_size,
                               int (*match_fun)(void *, void *, smx_action_t), void *data)
@@ -482,6 +544,12 @@ smx_action_t SIMIX_comm_irecv(smx_process_t dst_proc, smx_rdv_t rdv,
   return other_action;
 }
 
+smx_action_t SIMIX_pre_comm_iprobe(smx_simcall_t simcall, smx_rdv_t rdv,
+                                   int src, int tag,
+                                   int (*match_fun)(void *, void *, smx_action_t),
+                                   void *data){
+  return SIMIX_comm_iprobe(simcall->issuer, rdv, src, tag, match_fun, data);
+}
 
 smx_action_t SIMIX_comm_iprobe(smx_process_t dst_proc, smx_rdv_t rdv, int src,
                               int tag, int (*match_fun)(void *, void *, smx_action_t), void *data)
@@ -509,9 +577,9 @@ smx_action_t SIMIX_comm_iprobe(smx_process_t dst_proc, smx_rdv_t rdv, int src,
   return other_action;
 }
 
-void SIMIX_pre_comm_wait(smx_simcall_t simcall, smx_action_t action, double timeout, int idx)
+void SIMIX_pre_comm_wait(smx_simcall_t simcall, smx_action_t action, double timeout)
 {
-
+  int idx = simcall->mc_value;
   /* the simcall may be a wait, a send or a recv */
   surf_action_t sleep;
 
@@ -555,10 +623,8 @@ void SIMIX_pre_comm_wait(smx_simcall_t simcall, smx_action_t action, double time
   }
 }
 
-void SIMIX_pre_comm_test(smx_simcall_t simcall)
+void SIMIX_pre_comm_test(smx_simcall_t simcall, smx_action_t action)
 {
-  smx_action_t action = simcall->comm_test.comm;
-
   if(MC_is_active()){
     simcall->comm_test.result = action->comm.src_proc && action->comm.dst_proc;
     if(simcall->comm_test.result){
@@ -580,11 +646,11 @@ void SIMIX_pre_comm_test(smx_simcall_t simcall)
   }
 }
 
-void SIMIX_pre_comm_testany(smx_simcall_t simcall, int idx)
+void SIMIX_pre_comm_testany(smx_simcall_t simcall, xbt_dynar_t actions)
 {
+  int idx = simcall->mc_value;
   unsigned int cursor;
   smx_action_t action;
-  xbt_dynar_t actions = simcall->comm_testany.comms;
   simcall->comm_testany.result = -1;
 
   if (MC_is_active()){
@@ -611,11 +677,11 @@ void SIMIX_pre_comm_testany(smx_simcall_t simcall, int idx)
   SIMIX_simcall_answer(simcall);
 }
 
-void SIMIX_pre_comm_waitany(smx_simcall_t simcall, int idx)
+void SIMIX_pre_comm_waitany(smx_simcall_t simcall, xbt_dynar_t actions)
 {
+  int idx = simcall->mc_value;
   smx_action_t action;
   unsigned int cursor = 0;
-  xbt_dynar_t actions = simcall->comm_waitany.comms;
 
   if (MC_is_active()){
     action = xbt_dynar_get_as(actions, idx, smx_action_t);
@@ -860,6 +926,9 @@ void SIMIX_post_comm(smx_action_t action)
   }
 }
 
+void SIMIX_pre_comm_cancel(smx_simcall_t simcall, smx_action_t action){
+  SIMIX_comm_cancel(action);
+}
 void SIMIX_comm_cancel(smx_action_t action)
 {
   /* if the action is a waiting state means that it is still in a rdv */
@@ -894,6 +963,9 @@ void SIMIX_comm_resume(smx_action_t action)
 
 /************* Action Getters **************/
 
+double SIMIX_pre_comm_get_remains(smx_simcall_t simcall, smx_action_t action){
+  return SIMIX_comm_get_remains(action);
+}
 /**
  *  \brief get the amount remaining from the communication
  *  \param action The communication
@@ -924,11 +996,17 @@ double SIMIX_comm_get_remains(smx_action_t action)
   return remains;
 }
 
+e_smx_state_t SIMIX_pre_comm_get_state(smx_simcall_t simcall, smx_action_t action){
+  return SIMIX_comm_get_state(action);
+}
 e_smx_state_t SIMIX_comm_get_state(smx_action_t action)
 {
   return action->state;
 }
 
+void* SIMIX_pre_comm_get_src_data(smx_simcall_t simcall, smx_action_t action){
+  return SIMIX_comm_get_src_data(action);
+}
 /**
  *  \brief Return the user data associated to the sender of the communication
  *  \param action The communication
@@ -939,6 +1017,9 @@ void* SIMIX_comm_get_src_data(smx_action_t action)
   return action->comm.src_data;
 }
 
+void* SIMIX_pre_comm_get_dst_data(smx_simcall_t simcall, smx_action_t action){
+  return SIMIX_comm_get_dst_data(action);
+}
 /**
  *  \brief Return the user data associated to the receiver of the communication
  *  \param action The communication
@@ -949,11 +1030,17 @@ void* SIMIX_comm_get_dst_data(smx_action_t action)
   return action->comm.dst_data;
 }
 
+smx_process_t SIMIX_pre_comm_get_src_proc(smx_simcall_t simcall, smx_action_t action){
+  return SIMIX_comm_get_src_proc(action);
+}
 smx_process_t SIMIX_comm_get_src_proc(smx_action_t action)
 {
   return action->comm.src_proc;
 }
 
+smx_process_t SIMIX_pre_comm_get_dst_proc(smx_simcall_t simcall, smx_action_t action){
+  return SIMIX_comm_get_dst_proc(action);
+}
 smx_process_t SIMIX_comm_get_dst_proc(smx_action_t action)
 {
   return action->comm.dst_proc;