X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/9cc88b5ca5bce4893bbb192a38c6f175f5504cc0..2bd7ad0811b9be3c2038c29eee0578f544051e2d:/include/simgrid/s4u/Activity.hpp?ds=sidebyside diff --git a/include/simgrid/s4u/Activity.hpp b/include/simgrid/s4u/Activity.hpp index 4f73b17506..9973a00854 100644 --- a/include/simgrid/s4u/Activity.hpp +++ b/include/simgrid/s4u/Activity.hpp @@ -34,6 +34,7 @@ namespace s4u { */ class XBT_PUBLIC Activity : public xbt::Extendable { #ifndef DOXYGEN + friend ActivitySet; friend Comm; friend Exec; friend Io; @@ -104,14 +105,16 @@ protected: * It is forbidden to change the amount of work once the Activity is started */ Activity* set_remaining(double remains); - virtual void fire_on_completion() const = 0; + virtual void fire_on_start() const = 0; + virtual void fire_on_this_start() const = 0; + virtual void fire_on_completion() const = 0; virtual void fire_on_this_completion() const = 0; - virtual void fire_on_suspend() const = 0; - virtual void fire_on_this_suspend() const = 0; - virtual void fire_on_resume() const = 0; - virtual void fire_on_this_resume() const = 0; - virtual void fire_on_veto() const = 0; - virtual void fire_on_this_veto() const = 0; + virtual void fire_on_suspend() const = 0; + virtual void fire_on_this_suspend() const = 0; + virtual void fire_on_resume() const = 0; + virtual void fire_on_this_resume() const = 0; + virtual void fire_on_veto() = 0; + virtual void fire_on_this_veto() = 0; public: void start() @@ -233,7 +236,8 @@ template class Activity_T : public Activity { std::string name_ = "unnamed"; std::string tracing_category_ = ""; -protected: + inline static xbt::signal on_start; + xbt::signal on_this_start; inline static xbt::signal on_completion; xbt::signal on_this_completion; inline static xbt::signal on_suspend; @@ -243,7 +247,23 @@ protected: inline static xbt::signal on_veto; xbt::signal on_this_veto; +protected: + void fire_on_start() const override { on_start(static_cast(*this)); } + void fire_on_this_start() const override { on_this_start(static_cast(*this)); } + void fire_on_completion() const override { on_completion(static_cast(*this)); } + void fire_on_this_completion() const override { on_this_completion(static_cast(*this)); } + void fire_on_suspend() const override { on_suspend(static_cast(*this)); } + void fire_on_this_suspend() const override { on_this_suspend(static_cast(*this)); } + void fire_on_resume() const override { on_resume(static_cast(*this)); } + void fire_on_this_resume() const override { on_this_resume(static_cast(*this)); } + void fire_on_veto() override { on_veto(static_cast(*this)); } + void fire_on_this_veto() override { on_this_veto(static_cast(*this)); } + public: + /*! \static Add a callback fired when any activity starts (no veto) */ + static void on_start_cb(const std::function& cb) { on_start.connect(cb); } + /*! Add a callback fired when this specific activity starts (no veto) */ + void on_this_start_cb(const std::function& cb) { on_this_start.connect(cb); } /*! \static Add a callback fired when any activity completes (either normally, cancelled or failed) */ static void on_completion_cb(const std::function& cb) { on_completion.connect(cb); } /*! Add a callback fired when this specific activity completes (either normally, cancelled or failed) */ @@ -264,9 +284,15 @@ public: void on_this_veto_cb(const std::function& cb) { on_this_veto.connect(cb); } XBT_ATTRIB_DEPRECATED_v338("Please use on_suspend_cb() instead") static void on_suspended_cb( - const std::function& cb) { on_suspend.connect(cb); } + const std::function& cb) + { + on_suspend.connect(cb); + } XBT_ATTRIB_DEPRECATED_v338("Please use on_resume_cb() instead") static void on_resumed_cb( - const std::function& cb) { on_resume.connect(cb); } + const std::function& cb) + { + on_resume.connect(cb); + } AnyActivity* add_successor(ActivityPtr a) {