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_ = {};
32 std::function<void(Operation*)> end_func = [](Operation*) {};
34 void add_predecessor(Operation* predecessor);
35 bool ready_to_run() const;
36 void receive(Operation* source);
42 int iteration_limit_ = -1;
43 unsigned int iteration_count_ = 0;
44 bool working_ = false;
45 simgrid::s4u::ActivityPtr current_activity_;
46 Operation(const std::string& name, double amount);
47 ~Operation() = default;
53 std::string get_name();
54 void set_iteration_limit(unsigned int n);
55 void add_successor(OperationPtr op);
56 void on_end(std::function<void(Operation*)> func);
57 virtual void execute() = 0;
60 class ExecOp : public Operation {
62 simgrid::s4u::Host* host_;
64 ExecOp(const std::string& name, double flops, simgrid::s4u::Host* host);
67 static ExecOpPtr create(const std::string& name, double flops, simgrid::s4u::Host* host);
71 class CommOp : public Operation {
73 simgrid::s4u::Host* source_;
74 simgrid::s4u::Host* destination_;
76 CommOp(const std::string& name, double bytes, simgrid::s4u::Host* source, simgrid::s4u::Host* destination);
79 static CommOpPtr create(const std::string& name, double bytes, simgrid::s4u::Host* source,
80 simgrid::s4u::Host* destination);
83 } // namespace simgrid::plugins