#ifndef SIMGRID_KERNEL_ACTIVITY_ACTIVITYIMPL_HPP
#define SIMGRID_KERNEL_ACTIVITY_ACTIVITYIMPL_HPP
-#include <list>
-#include <string>
-#include <string_view>
-
#include "simgrid/forward.h"
-#include <xbt/utility.hpp>
+#include "simgrid/kernel/resource/Action.hpp"
+#include "simgrid/simix.hpp"
+#include "src/kernel/actor/Simcall.hpp"
+#include "xbt/utility.hpp"
#include <atomic>
-#include <simgrid/kernel/resource/Action.hpp>
-#include <simgrid/simix.hpp>
+#include <list>
+#include <string>
+#include <string_view>
namespace simgrid::kernel::activity {
XBT_DECLARE_ENUM_CLASS(State, WAITING, READY, RUNNING, DONE, CANCELED, FAILED, SRC_HOST_FAILURE, DST_HOST_FAILURE,
TIMEOUT, SRC_TIMEOUT, DST_TIMEOUT, LINK_FAILURE);
-class XBT_PUBLIC ActivityImpl {
+class XBT_PUBLIC ActivityImpl : public kernel::actor::ObjectAccessSimcallItem {
std::atomic_int_fast32_t refcount_{0};
- std::string name_ = "";
+ std::string name_ = "";
actor::ActorImpl* actor_ = nullptr;
State state_ = State::WAITING; /* State of the activity */
double start_time_ = -1.0;
double finish_time_ = -1.0;
+ std::vector<s4u::Host*> hosts_;
public:
virtual ~ActivityImpl();
name_ = name;
}
void set_start_time(double start_time) { start_time_ = start_time; }
+ void clear_hosts() { hosts_.clear(); }
+ void add_host(s4u::Host* host) { hosts_.push_back(host); }
+ void set_hosts(const std::vector<s4u::Host*>& hosts) { hosts_ = hosts; }
public:
const std::string& get_name() const { return name_; }
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);