1 #ifndef SIMGRID_PLUGINS_OPERATION_H_
2 #define SIMGRID_PLUGINS_OPERATION_H_
4 #include <simgrid/s4u/Activity.hpp>
5 #include <xbt/Extendable.hpp>
10 namespace simgrid::plugins {
13 using OperationPtr = std::shared_ptr<Operation>;
15 using ExecOpPtr = std::shared_ptr<ExecOp>;
17 using CommOpPtr = std::shared_ptr<CommOp>;
19 class ExtendedAttributeActivity {
21 static simgrid::xbt::Extension<simgrid::s4u::Activity, ExtendedAttributeActivity> EXTENSION_ID;
22 Operation* operation_;
24 ExtendedAttributeActivity(){};
30 std::set<Operation*> successors_ = {};
31 std::map<Operation*, unsigned int> predecessors_ = {};
33 void add_predecessor(Operation* predecessor);
34 void remove_predecessor(Operation* predecessor);
35 bool ready_to_run() const;
36 void receive(Operation* source);
42 int queued_execs_ = 0;
44 bool working_ = false;
45 simgrid::s4u::ActivityPtr current_activity_;
46 std::function<void(Operation*)> end_func_ = [](Operation*) {};
47 std::function<void(Operation*)> start_func_ = [](Operation*) {};
48 Operation(const std::string& name, double amount);
49 ~Operation() = default;
50 virtual void execute() = 0;
54 std::string get_name();
55 void enqueue_execs(int n);
56 void set_amount(double amount);
57 void add_successor(OperationPtr op);
58 void remove_successor(OperationPtr op);
59 void on_start(std::function<void(Operation*)> func);
60 void on_end(std::function<void(Operation*)> func);
64 class ExecOp : public Operation {
66 simgrid::s4u::Host* host_;
68 ExecOp(const std::string& name, double flops, simgrid::s4u::Host* host);
72 static ExecOpPtr create(const std::string& name, double flops, simgrid::s4u::Host* host);
73 void set_host(simgrid::s4u::Host* host);
76 class CommOp : public Operation {
78 simgrid::s4u::Host* source_;
79 simgrid::s4u::Host* destination_;
81 CommOp(const std::string& name, double bytes, simgrid::s4u::Host* source, simgrid::s4u::Host* destination);
85 static CommOpPtr create(const std::string& name, double bytes, simgrid::s4u::Host* source,
86 simgrid::s4u::Host* destination);
87 void set_source(simgrid::s4u::Host* source);
88 void set_destination(simgrid::s4u::Host* destination);
90 } // namespace simgrid::plugins