+ explicit ExecSeq(sg_host_t host, double flops_amount);
+
+public:
+ friend XBT_PUBLIC ExecPtr this_actor::exec_init(double flops_amount);
+
+ ~ExecSeq() = default;
+
+ Exec* start() override;
+
+ ExecPtr set_host(Host* host) override;
+
+ double get_remaining() override;
+ double get_remaining_ratio() override;
+};
+
+class XBT_PUBLIC ExecPar : public Exec {
+ std::vector<s4u::Host*> hosts_;
+ std::vector<double> flops_amounts_;
+ std::vector<double> bytes_amounts_;
+ explicit ExecPar(const std::vector<s4u::Host*>& hosts, const std::vector<double>& flops_amounts,
+ const std::vector<double>& bytes_amounts);
+ ExecPtr set_host(Host*) override { /* parallel exec cannot be moved */ THROW_UNIMPLEMENTED; }
+
+public:
+ ~ExecPar() = default;
+ friend XBT_PUBLIC ExecPtr this_actor::exec_init(const std::vector<s4u::Host*>& hosts,
+ const std::vector<double>& flops_amounts,
+ const std::vector<double>& bytes_amounts);
+ double get_remaining() override;
+ double get_remaining_ratio() override;
+ Exec* start() override;
+};
+
+} // namespace s4u
+} // namespace simgrid