+public:
+ static Task* create(std::string name, double flops_amount, double bytes_amount, void* data);
+ static Task* create_parallel(std::string name, int host_nb, const msg_host_t* host_list, double* flops_amount,
+ double* bytes_amount, void* data);
+ msg_error_t execute();
+ void cancel();
+
+ Task(const Task&) = delete;
+ Task& operator=(const Task&) = delete;
+ ~Task() = default;
+
+ bool is_used() { return is_used_; }
+ bool is_parallel() { return parallel_; }
+
+ void set_used();
+ void set_not_used() { this->is_used_ = false; }
+ const std::string& get_name() const { return name_; }
+ const char* get_cname() { return name_.c_str(); }
+ void set_name(const char* new_name) { name_ = std::string(new_name); }
+ void set_tracing_category(const char* category) { tracing_category_ = category ? std::string(category) : ""; }
+ const std::string& get_tracing_category() { return tracing_category_; }
+ bool has_tracing_category() { return not tracing_category_.empty(); }
+ void* get_user_data() { return userdata_; }
+ void set_user_data(void* data) { userdata_ = data; }
+ long long int get_id() { return id_; }
+ double get_priority() { return priority_; }
+ void set_priority(double priority);
+ void set_bound(double bound) { bound_ = bound; }
+ double get_bound() { return bound_; }
+ void set_rate(double rate) { rate_ = rate; }
+ double get_rate() { return rate_; }
+
+ s4u::Actor* get_sender();
+ s4u::Host* get_source();
+
+ kernel::activity::ExecImplPtr compute = nullptr; /* SIMIX modeling of computation */
+ s4u::CommPtr comm = nullptr; /* S4U modeling of communication */
+ double flops_amount = 0.0; /* Computation size */
+ double bytes_amount = 0.0; /* Data size */