From: Frederic Suter Date: Thu, 4 Feb 2021 12:35:48 +0000 (+0100) Subject: Chainable CRTPed version of vetoable_start X-Git-Tag: v3.27~453 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/6e7cc86e2491904a4704c7977a681033dd8325ab Chainable CRTPed version of vetoable_start --- diff --git a/include/simgrid/s4u/Activity.hpp b/include/simgrid/s4u/Activity.hpp index 9bd646b89f..83d4870e80 100644 --- a/include/simgrid/s4u/Activity.hpp +++ b/include/simgrid/s4u/Activity.hpp @@ -176,6 +176,12 @@ public: } void* get_user_data() const { return user_data_; } + + AnyActivity* vetoable_start() + { + Activity::vetoable_start(); + return static_cast(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 diff --git a/src/s4u/s4u_Mailbox.cpp b/src/s4u/s4u_Mailbox.cpp index f5fedf7d0f..67a26c844c 100644 --- a/src/s4u/s4u_Mailbox.cpp +++ b/src/s4u/s4u_Mailbox.cpp @@ -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()