XBT_PUBLIC(int) SIMIX_rdv_get_count_waiting_comm(smx_rdv_t rdv, smx_host_t host);
XBT_PUBLIC(smx_comm_t) SIMIX_rdv_get_head(smx_rdv_t rdv);
XBT_PUBLIC(smx_comm_t) SIMIX_rdv_get_request(smx_rdv_t rdv, smx_comm_type_t type);
+XBT_PUBLIC(void) SIMIX_rdv_set_data(smx_rdv_t rdv,void *data);
+XBT_PUBLIC(void*) SIMIX_rdv_get_data(smx_rdv_t rdv);
/*****Communication Requests*****/
XBT_PUBLIC(void) SIMIX_communication_cancel(smx_comm_t comm);
size_t src_buff_size, smx_comm_t *comm, void *data);
XBT_PUBLIC(void) SIMIX_network_recv(smx_rdv_t rdv, double timeout, void *dst_buff,
size_t *dst_buff_size, smx_comm_t *comm);
-XBT_PUBLIC(void) SIMIX_network_wait(smx_action_t comm);
+XBT_PUBLIC(void) SIMIX_network_wait(smx_action_t comm, double timeout);
XBT_PUBLIC(int) SIMIX_network_test(smx_action_t comm);
SG_END_DECL()
smx_mutex_t read;
smx_mutex_t write;
xbt_fifo_t comm_fifo;
+ void *data;
} s_smx_rvpoint_t;
typedef struct s_smx_comm {
return (smx_comm_t)xbt_fifo_get_item_content(xbt_fifo_get_first_item(rdv->comm_fifo));
}
+/** @brief adds some API-related data to the rendez-vous point */
+void SIMIX_rdv_set_data(smx_rdv_t rdv,void *data) {
+ rdv->data=data;
+}
+/** @brief gets API-related data from the rendez-vous point */
+void *SIMIX_rdv_get_data(smx_rdv_t rdv) {
+ return rdv->data;
+}
/******************************************************************************/
/* Communication Requests */
dst_buff_size = MIN(dst_buff_size, src_buff_size);
/* Update the receiver's buffer size to the copied amount */
- *comm->dst_buff_size = dst_buff_size;
+ if (comm->dst_buff_size)
+ *comm->dst_buff_size = dst_buff_size;
if(dst_buff_size == 0)
return;
/* Asynchronous Communication */
/******************************************************************************/
-/*
+
void SIMIX_network_wait(smx_action_t comm, double timeout)
{
- TO BE IMPLEMENTED
+ THROW_UNIMPLEMENTED;
}
XBT_PUBLIC(int) SIMIX_network_test(smx_action_t comm)
{
- TO BE IMPLEMENTED
-}*/
+ THROW_UNIMPLEMENTED;
+}