Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Reduce the amount of implicit include directories
[simgrid.git] / src / s4u / s4u_comm.cpp
index 44f526e..d26c4d6 100644 (file)
@@ -5,8 +5,8 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "xbt/log.h"
-#include "msg/msg_private.h"
-#include "msg/msg_mailbox.h"
+#include "src/msg/msg_private.h"
+#include "src/msg/msg_mailbox.h"
 
 #include "simgrid/s4u/comm.hpp"
 
@@ -24,8 +24,9 @@ s4u::Comm &s4u::Comm::send_init(s4u::Actor *sender, s4u::Mailbox &chan) {
 
        return *res;
 }
-s4u::Comm &s4u::Comm::recv_init(s4u::Mailbox &chan) {
+s4u::Comm &s4u::Comm::recv_init(s4u::Actor *receiver, s4u::Mailbox &chan) {
        s4u::Comm *res = new s4u::Comm();
+       res->p_receiver = receiver;
        res->p_mailbox = &chan;
 
        return *res;
@@ -78,7 +79,7 @@ void s4u::Comm::start() {
                                p_matchFunction, p_cleanFunction, p_copyDataFunction,
                                p_userData, p_detached);
        } else if (p_dstBuff != NULL) { // Receiver side
-               p_inferior = simcall_comm_irecv(p_mailbox->getInferior(), p_dstBuff, &p_dstBuffSize,
+               p_inferior = simcall_comm_irecv(p_receiver->getInferior(), p_mailbox->getInferior(), p_dstBuff, &p_dstBuffSize,
                                p_matchFunction, p_copyDataFunction,
                                p_userData, p_rate);
 
@@ -99,7 +100,7 @@ void s4u::Comm::wait() {
                                        p_matchFunction, p_copyDataFunction,
                                        p_userData, -1 /*timeout*/);
                } else {
-                       simcall_comm_recv(p_mailbox->getInferior(), p_dstBuff, &p_dstBuffSize,
+                       simcall_comm_recv(p_receiver->getInferior(), p_mailbox->getInferior(), p_dstBuff, &p_dstBuffSize,
                                        p_matchFunction, p_copyDataFunction,
                                        p_userData, -1/*timeout*/, p_rate);
                }
@@ -122,7 +123,7 @@ void s4u::Comm::wait(double timeout) {
                                p_matchFunction, p_copyDataFunction,
                                p_userData, timeout);
        } else { // Receiver
-               simcall_comm_recv(p_mailbox->getInferior(), p_dstBuff, &p_dstBuffSize,
+               simcall_comm_recv(p_receiver->getInferior(), p_mailbox->getInferior(), p_dstBuff, &p_dstBuffSize,
                                p_matchFunction, p_copyDataFunction,
                                p_userData, timeout, p_rate);
        }
@@ -140,3 +141,12 @@ s4u::Comm &s4u::Comm::send_async(s4u::Actor *sender, Mailbox &dest, void *data,
        return res;
 }
 
+s4u::Comm &s4u::Comm::recv_async(s4u::Actor *receiver, Mailbox &dest, void **data) {
+       s4u::Comm &res = s4u::Comm::recv_init(receiver, dest);
+
+       res.setDstData(data);
+
+       res.start();
+       return res;
+}
+