bool has_no_successor() const { return successors_.empty(); }
const std::set<ActivityPtr>& get_dependencies() const { return dependencies_; }
const std::vector<ActivityPtr>& get_successors() const { return successors_; }
+ virtual void fire_this_completion() const = 0;
protected:
Activity() = default;
private:
static xbt::signal<void(Activity&)> on_veto;
- static xbt::signal<void(Activity const&)> on_completion;
- static xbt::signal<void(Activity const&)> on_suspended;
- static xbt::signal<void(Activity const&)> on_resumed;
+ static xbt::signal<void(Activity const&)> on_suspend;
+ static xbt::signal<void(Activity const&)> on_resume;
public:
/*! Add a callback fired each time that the activity fails to start because of a veto (e.g., unsolved dependency or no
* resource assigned) */
static void on_veto_cb(const std::function<void(Activity&)>& cb) { on_veto.connect(cb); }
- /*! Add a callback fired when the activity completes (either normally, cancelled or failed) */
- static void on_completion_cb(const std::function<void(Activity const&)>& cb) { on_completion.connect(cb); }
/*! Add a callback fired when the activity is suspended */
- static void on_suspended_cb(const std::function<void(Activity const&)>& cb) { on_suspended.connect(cb); }
+ static void on_suspend_cb(const std::function<void(Activity const&)>& cb)
+ {
+ on_suspend.connect(cb);
+ }
/*! Add a callback fired when the activity is resumed after being suspended */
- static void on_resumed_cb(const std::function<void(Activity const&)>& cb) { on_resumed.connect(cb); }
+ static void on_resume_cb(const std::function<void(Activity const&)>& cb)
+ {
+ on_resume.connect(cb);
+ }
+
+ XBT_ATTRIB_DEPRECATED_v334("Please use on_suspend_cb() instead") static void on_suspended_cb(
+ const std::function<void(Activity const&)>& cb)
+ {
+ on_suspend.connect(cb);
+ }
+ XBT_ATTRIB_DEPRECATED_v334("Please use on_resume_cb() instead") static void on_resumed_cb(
+ const std::function<void(Activity const&)>& cb)
+ {
+ on_resume.connect(cb);
+ }
XBT_ATTRIB_DEPRECATED_v334("All start() are vetoable now. Please use start() ") void vetoable_start()
{
// released by the on_completion() callbacks.
ActivityPtr keepalive(this);
state_ = state;
- on_completion(*this);
+ fire_this_completion();
if (state == State::FINISHED)
release_dependencies();
}
std::string tracing_category_ = "";
public:
+ inline static xbt::signal<void(AnyActivity const&)> on_completion;
+ /*! Add a callback fired when the activity completes (either normally, cancelled or failed) */
+ static void on_completion_cb(const std::function<void(AnyActivity const&)>& cb) { on_completion.connect(cb); }
+
AnyActivity* add_successor(ActivityPtr a)
{
Activity::add_successor(a);
AnyActivity* cancel() { return static_cast<AnyActivity*>(Activity::cancel()); }
AnyActivity* wait() { return wait_for(-1.0); }
- virtual AnyActivity* wait_for(double timeout) { return static_cast<AnyActivity*>(Activity::wait_for(timeout)); }
+ virtual AnyActivity* wait_for(double timeout) {
+ return static_cast<AnyActivity*>(Activity::wait_for(timeout));
+ }
#ifndef DOXYGEN
/* The refcounting is done in the ancestor class, Activity, but we want each of the classes benefiting of the CRTP