+ DEBUG1("Communication %p complete!", comm);
+ SIMIX_communication_cleanup(comm);
+}
+
+/**
+ * \brief Cancels a communication
+ * \brief comm The communication to cancel
+ */
+XBT_INLINE void SIMIX_communication_cancel(smx_comm_t comm)
+{
+ if (comm->act)
+ SIMIX_action_cancel(comm->act);
+}
+
+/**
+ * \brief get the amount remaining from the communication
+ * \param comm The communication
+ */
+XBT_INLINE double SIMIX_communication_get_remains(smx_comm_t comm)
+{
+ DEBUG1("calling SIMIX_action_get_remains(%p)", comm->act);
+ return SIMIX_action_get_remains(comm->act);
+}
+
+/**
+ * \brief verify if communication is latency bounded
+ * \param comm The communication
+ */
+XBT_INLINE int SIMIX_communication_is_latency_bounded(smx_comm_t comm)
+{
+ //try to find comm on the list of finished flows
+ uintptr_t key = 0;
+ uintptr_t data = 0;
+ xbt_dict_cursor_t cursor;
+ xbt_dict_foreach(latency_limited_dict,cursor,key,data) {
+ DEBUG2("comparing key=%p with comm=%p", (void*)key, (void*)comm);
+ if((void*)comm == (void*)key){
+ DEBUG2("key %p found, return value latency limited value %d", (void*)key, (int)data);
+ return (int)data;
+ }
+ }
+
+ DEBUG1("calling SIMIX_action_is_latency_bounded(%p)", comm->act);
+ return SIMIX_action_is_latency_bounded(comm->act);
+}
+
+/******************************************************************************/
+/* SIMIX_network_copy_data callbacks */
+/******************************************************************************/
+static void (*SIMIX_network_copy_data_callback)(smx_comm_t, size_t) = &SIMIX_network_copy_pointer_callback;
+
+void SIMIX_network_set_copy_data_callback(void (*callback)(smx_comm_t, size_t)) {
+ SIMIX_network_copy_data_callback = callback;
+}
+
+void SIMIX_network_copy_pointer_callback(smx_comm_t comm, size_t buff_size) {
+ xbt_assert1((buff_size == sizeof(void*)), "Cannot copy %zu bytes: must be sizeof(void*)",buff_size);
+ *(void**)(comm->dst_buff) = comm->src_buff;
+}
+
+void SIMIX_network_copy_buffer_callback(smx_comm_t comm, size_t buff_size) {
+ memcpy(comm->dst_buff, comm->src_buff, buff_size);