+ 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
+
+ void register_simcall(smx_simcall_t simcall);
+ void unregister_simcall(smx_simcall_t simcall);
+ void handle_activity_waitany(smx_simcall_t simcall);
+ void clean_action();
+ virtual double get_remaining() const;
+ // Support for the boost::intrusive_ptr<ActivityImpl> datatype