X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/985e0a5509e230076d22095da54dd0123d2afe5e..874aec87c7ce1894a9f017d2adf07ce7b8abe71d:/include/simgrid/s4u/Comm.hpp diff --git a/include/simgrid/s4u/Comm.hpp b/include/simgrid/s4u/Comm.hpp index 393b48ac5c..a92f87f542 100644 --- a/include/simgrid/s4u/Comm.hpp +++ b/include/simgrid/s4u/Comm.hpp @@ -41,7 +41,9 @@ class XBT_PUBLIC Comm : public Activity_T { protected: static xbt::signal on_send; + xbt::signal on_this_send; static xbt::signal on_recv; + xbt::signal on_this_recv; inline static xbt::signal on_start; xbt::signal on_this_start; @@ -63,9 +65,17 @@ protected: void fire_on_this_veto() const override { on_this_veto(const_cast(*this)); } public: + /*! \static Add a callback fired when the send of any Comm is posted */ static void on_send_cb(const std::function& cb) { on_send.connect(cb); } + /*! Add a callback fired when the send of this specific Comm is posted */ + void on_this_send_cb(const std::function& cb) { on_this_send.connect(cb); } + /*! \static Add a callback fired when the recv of any Comm is posted */ static void on_recv_cb(const std::function& cb) { on_recv.connect(cb); } + /*! Add a callback fired when the recv of this specific Comm is posted */ + void on_this_recv_cb(const std::function& cb) { on_this_recv.connect(cb); } + /*! \static Add a callback fired when any Comm starts */ static void on_start_cb(const std::function& cb) { on_start.connect(cb); } + /*! Add a callback fired when this specific Comm starts */ void on_this_start_cb(const std::function& cb) { on_this_start.connect(cb); } CommPtr set_copy_data_callback(const std::function& callback); @@ -86,7 +96,8 @@ public: const std::function& copy_data_fun, void* data, double timeout, double rate); - /* "One-sided" communications. This way of communicating bypasses the mailbox and actors mechanism. It creates a + /* \static + * "One-sided" communications. This way of communicating bypasses the mailbox and actors mechanism. It creates a * communication (vetoabled, asynchronous, or synchronous) directly between two hosts. There is really no limit on * the hosts involved. In particular, the actor creating such a communication does not have to be on one of the * involved hosts! Enjoy the comfort of the simulator :) @@ -179,19 +190,19 @@ public: Comm* wait_for(double timeout) override; - /*! take a vector s4u::CommPtr and return the rank of the first finished one (or -1 if none is done). */ + /*! \static take a vector s4u::CommPtr and return the rank of the first finished one (or -1 if none is done). */ static ssize_t test_any(const std::vector& comms); - /*! take a vector s4u::CommPtr and return when one of them is finished. + /*! \static take a vector s4u::CommPtr and return when one of them is finished. * The return value is the rank of the first finished CommPtr. */ static ssize_t wait_any(const std::vector& comms) { return wait_any_for(comms, -1); } - /*! Same as wait_any, but with a timeout. Return -1 if the timeout occurs.*/ + /*! \static Same as wait_any, but with a timeout. Return -1 if the timeout occurs.*/ static ssize_t wait_any_for(const std::vector& comms, double timeout); - /*! take a vector s4u::CommPtr and return when all of them is finished. */ + /*! \static take a vector s4u::CommPtr and return when all of them is finished. */ static void wait_all(const std::vector& comms); - /*! Same as wait_all, but with a timeout. Return the number of terminated comm (less than comms.size() if the timeout - * occurs). */ + /*! \static Same as wait_all, but with a timeout. Return the number of terminated comm (less than comms.size() if + * the timeout occurs). */ static size_t wait_all_for(const std::vector& comms, double timeout); }; } // namespace simgrid::s4u