+ virtual void wait_for(actor::ActorImpl* issuer, double timeout);
+ static void wait_any_for(actor::ActorImpl* issuer, const std::vector<ActivityImpl*>& activities, double timeout);
+ virtual ActivityImpl& set_timeout(double) { THROW_UNIMPLEMENTED; }
+
+ virtual void suspend();
+ virtual void resume();
+ virtual void cancel();
+
+ virtual void post() = 0; // Called by the main loop when the activity is marked as terminated or failed by its model.
+ // Setups the status, clean things up, and call finish()
+ virtual void set_exception(actor::ActorImpl* issuer) = 0; // Raising exceptions and stuff
+ virtual void finish() = 0; // Unlock all simcalls blocked on that activity, either because it was marked as done by
+ // the model or because it terminated without waiting for the model
+
+ s4u::Host* get_host() const { return hosts_.front(); }
+ const std::vector<s4u::Host*>& get_hosts() const { return hosts_; };
+
+ void register_simcall(actor::Simcall* simcall);
+ void unregister_simcall(actor::Simcall* simcall);
+ void handle_activity_waitany(actor::Simcall* simcall);
+ void clean_action();
+ virtual double get_remaining() const;
+ // Support for the boost::intrusive_ptr<ActivityImpl> datatype