Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add first unit tests for topological sorting
[simgrid.git] / src / s4u / s4u_Comm.cpp
index eec97a7..87174d5 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2006-2022. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2006-2023. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 #include <simgrid/s4u/Engine.hpp>
 #include <simgrid/s4u/Mailbox.hpp>
 
-#include "mc/mc.h"
 #include "src/kernel/activity/CommImpl.hpp"
 #include "src/kernel/actor/ActorImpl.hpp"
 #include "src/kernel/actor/SimcallObserver.hpp"
+#include "src/mc/mc.h"
 #include "src/mc/mc_replay.hpp"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(s4u_comm, s4u_activity, "S4U asynchronous communications");
 
-namespace simgrid {
-namespace s4u {
+namespace simgrid::s4u {
 xbt::signal<void(Comm const&)> Comm::on_send;
 xbt::signal<void(Comm const&)> Comm::on_recv;
-xbt::signal<void(Comm const&)> Comm::on_completion;
 
 CommPtr Comm::set_copy_data_callback(const std::function<void(kernel::activity::CommImpl*, void*, size_t)>& callback)
 {
@@ -83,8 +81,8 @@ void Comm::send(kernel::actor::ActorImpl* sender, const Mailbox* mbox, double ta
     comm = simgrid::kernel::actor::simcall_answered(
         [&send_observer] { return simgrid::kernel::activity::CommImpl::isend(&send_observer); }, &send_observer);
 
-    simgrid::kernel::actor::ActivityWaitSimcall wait_observer{sender, comm.get(), timeout};
-    if (simgrid::kernel::actor::simcall_blocking(
+    if (simgrid::kernel::actor::ActivityWaitSimcall wait_observer{sender, comm.get(), timeout};
+        simgrid::kernel::actor::simcall_blocking(
             [&wait_observer] {
               wait_observer.get_activity()->wait_for(wait_observer.get_issuer(), wait_observer.get_timeout());
             },
@@ -126,8 +124,8 @@ void Comm::recv(kernel::actor::ActorImpl* receiver, const Mailbox* mbox, void* d
     comm = simgrid::kernel::actor::simcall_answered(
         [&observer] { return simgrid::kernel::activity::CommImpl::irecv(&observer); }, &observer);
 
-    simgrid::kernel::actor::ActivityWaitSimcall wait_observer{receiver, comm.get(), timeout};
-    if (simgrid::kernel::actor::simcall_blocking(
+    if (simgrid::kernel::actor::ActivityWaitSimcall wait_observer{receiver, comm.get(), timeout};
+        simgrid::kernel::actor::simcall_blocking(
             [&wait_observer] {
               wait_observer.get_activity()->wait_for(wait_observer.get_issuer(), wait_observer.get_timeout());
             },
@@ -180,7 +178,7 @@ CommPtr Comm::set_source(Host* from)
   if (state_ == State::STARTING && remains_ <= 0)
     XBT_DEBUG("This communication has a payload size of 0 byte. It cannot start yet");
   else
-    vetoable_start();
+    start();
 
   return this;
 }
@@ -198,7 +196,7 @@ CommPtr Comm::set_destination(Host* to)
   if (state_ == State::STARTING && remains_ <= 0)
     XBT_DEBUG("This communication has a payload size of 0 byte. It cannot start yet");
   else
-    vetoable_start();
+    start();
 
   return this;
 }
@@ -274,7 +272,7 @@ CommPtr Comm::set_dst_data(void** buff, size_t size)
 
 CommPtr Comm::set_payload_size(uint64_t bytes)
 {
-  Activity::set_remaining(bytes);
+  set_remaining(bytes);
   if (pimpl_) {
     boost::static_pointer_cast<kernel::activity::CommImpl>(pimpl_)->set_size(bytes);
   }
@@ -295,7 +293,7 @@ bool Comm::is_assigned() const
          mailbox_ != nullptr;
 }
 
-Comm* Comm::start()
+Comm* Comm::do_start()
 {
   xbt_assert(get_state() == State::INITED || get_state() == State::STARTING,
              "You cannot use %s() once your communication started (not implemented)", __FUNCTION__);
@@ -358,7 +356,7 @@ Comm* Comm::detach()
              "You cannot use %s() once your communication is %s (not implemented)", __FUNCTION__, get_state_str());
   xbt_assert(dst_buff_ == nullptr && dst_buff_size_ == 0, "You can only detach sends, not recvs");
   detached_ = true;
-  vetoable_start();
+  start();
   return this;
 }
 
@@ -388,7 +386,7 @@ Comm* Comm::wait_for(double timeout)
     case State::INITED:
     case State::STARTING: // It's not started yet. Do it in one simcall if it's a regular communication
       if (get_source() != nullptr || get_destination() != nullptr) {
-        return vetoable_start()->wait_for(timeout); // In the case of host2host comm, do it in two simcalls
+        return start()->wait_for(timeout); // In the case of host2host comm, do it in two simcalls
       } else if (src_buff_ != nullptr) {
         on_send(*this);
         send(sender_, mailbox_, remains_, rate_, src_buff_, src_buff_size_, match_fun_, copy_data_function_,
@@ -473,8 +471,7 @@ size_t Comm::wait_all_for(const std::vector<CommPtr>& comms, double timeout)
   }
   return comms.size();
 }
-} // namespace s4u
-} // namespace simgrid
+} // namespace simgrid::s4u
 /* **************************** Public C interface *************************** */
 void sg_comm_detach(sg_comm_t comm, void (*clean_function)(void*))
 {