1 #ifndef SIMGRID_PLUGINS_OPERATION_H_
2 #define SIMGRID_PLUGINS_OPERATION_H_
4 #include <simgrid/s4u/Activity.hpp>
5 #include <xbt/Extendable.hpp>
11 namespace simgrid::plugins {
14 using OperationPtr = std::shared_ptr<Operation>;
16 using ExecOpPtr = std::shared_ptr<ExecOp>;
18 using CommOpPtr = std::shared_ptr<CommOp>;
20 class ExtendedAttributeActivity {
22 static simgrid::xbt::Extension<simgrid::s4u::Activity, ExtendedAttributeActivity> EXTENSION_ID;
23 Operation* operation_;
25 ExtendedAttributeActivity(){};
31 std::set<Operation*> successors_ = {};
32 std::map<Operation*, unsigned int> predecessors_ = {};
34 void add_predecessor(Operation* predecessor);
35 void remove_predecessor(Operation* predecessor);
36 bool ready_to_run() const;
37 void receive(Operation* source);
43 int queued_execs_ = 0;
45 bool working_ = false;
46 simgrid::s4u::ActivityPtr current_activity_;
47 std::function<void(Operation*)> end_func_ = [](Operation*) {};
48 std::function<void(Operation*)> start_func_ = [](Operation*) {};
49 Operation(const std::string& name, double amount);
50 virtual ~Operation() = default;
51 virtual void execute() = 0;
55 std::string get_name();
56 void enqueue_execs(int n);
57 void set_amount(double amount);
58 void add_successor(OperationPtr op);
59 void remove_successor(OperationPtr op);
60 void on_start(std::function<void(Operation*)> func);
61 void on_end(std::function<void(Operation*)> func);
65 class ExecOp : public Operation {
67 simgrid::s4u::Host* host_;
69 ExecOp(const std::string& name, double flops, simgrid::s4u::Host* host);
73 static ExecOpPtr create(const std::string& name, double flops, simgrid::s4u::Host* host);
74 void set_host(simgrid::s4u::Host* host);
77 class CommOp : public Operation {
79 simgrid::s4u::Host* source_;
80 simgrid::s4u::Host* destination_;
82 CommOp(const std::string& name, double bytes, simgrid::s4u::Host* source, simgrid::s4u::Host* destination);
86 static CommOpPtr create(const std::string& name, double bytes, simgrid::s4u::Host* source,
87 simgrid::s4u::Host* destination);
88 void set_source(simgrid::s4u::Host* source);
89 void set_destination(simgrid::s4u::Host* destination);
91 } // namespace simgrid::plugins