Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Chainable CRTPed version of vetoable_start
authorFrederic Suter <frederic.suter@cc.in2p3.fr>
Thu, 4 Feb 2021 12:35:48 +0000 (13:35 +0100)
committerFrederic Suter <frederic.suter@cc.in2p3.fr>
Thu, 4 Feb 2021 12:35:48 +0000 (13:35 +0100)
include/simgrid/s4u/Activity.hpp
src/s4u/s4u_Mailbox.cpp

index 9bd646b..83d4870 100644 (file)
@@ -176,6 +176,12 @@ public:
   }
 
   void* get_user_data() const { return user_data_; }
+
+  AnyActivity* vetoable_start()
+  {
+    Activity::vetoable_start();
+    return static_cast<AnyActivity*>(this);
+  }
 #ifndef DOXYGEN
   /* The refcounting is done in the ancestor class, Activity, but we want each of the classes benefiting of the CRTP
    * (Exec, Comm, etc) to have smart pointers too, so we define these methods here, that forward the ptr_release and
index f5fedf7..67a26c8 100644 (file)
@@ -104,22 +104,20 @@ CommPtr Mailbox::put_async(void* payload, uint64_t simulated_size_in_bytes)
   res->vetoable_start();
   return res;
 }
+
 void Mailbox::put(void* payload, uint64_t simulated_size_in_bytes)
 {
   xbt_assert(payload != nullptr, "You cannot send nullptr");
 
-  CommPtr c = put_init()->set_payload_size(simulated_size_in_bytes)->set_src_data(payload);
-  c->vetoable_start();
-  c->wait();
+  put_init()->set_payload_size(simulated_size_in_bytes)->set_src_data(payload)->vetoable_start()->wait();
 }
+
 /** Blocking send with timeout */
 void Mailbox::put(void* payload, uint64_t simulated_size_in_bytes, double timeout)
 {
   xbt_assert(payload != nullptr, "You cannot send nullptr");
 
-  CommPtr c = put_init()->set_payload_size(simulated_size_in_bytes)->set_src_data(payload);
-  c->vetoable_start();
-  c->wait_for(timeout);
+  put_init()->set_payload_size(simulated_size_in_bytes)->set_src_data(payload)->vetoable_start()->wait_for(timeout);
 }
 
 CommPtr Mailbox::get_init()