Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
several updates to plugin operation
[simgrid.git] / include / simgrid / plugins / operation.hpp
index 43c76a3..0ff8527 100644 (file)
@@ -29,9 +29,9 @@ private:
   static bool inited_;
   std::set<Operation*> successors_                 = {};
   std::map<Operation*, unsigned int> predecessors_ = {};
-  std::function<void(Operation*)> end_func         = [](Operation*) {};
 
   void add_predecessor(Operation* predecessor);
+  void remove_predecessor(Operation* predecessor);
   bool ready_to_run() const;
   void receive(Operation* source);
   void complete();
@@ -39,22 +39,27 @@ private:
 protected:
   std::string name_;
   double amount_;
-  int iteration_limit_ = -1;
-  int iteration_count_ = 0;
+  int queued_execs_ = 0;
+  int count_ = 0;
   bool working_        = false;
   simgrid::s4u::ActivityPtr current_activity_;
+  std::function<void(Operation*)> end_func_         = [](Operation*) {};
+  std::function<void(Operation*)> start_func_       = [](Operation*) {};
   Operation(const std::string& name, double amount);
   ~Operation() = default;
-  void consume();
-  void call_end();
+  virtual void execute() = 0;
 
 public:
   static void init();
   std::string get_name();
-  void set_iteration_limit(unsigned int n);
+  void enqueue_execs(int n);
+  void set_amount(double amount);
   void add_successor(OperationPtr op);
+  void remove_successor(OperationPtr op);
+  void on_start(std::function<void(Operation*)> func);
   void on_end(std::function<void(Operation*)> func);
-  virtual void execute() = 0;
+  int get_count();
+
 };
 
 class ExecOp : public Operation {
@@ -62,10 +67,11 @@ private:
   simgrid::s4u::Host* host_;
 
   ExecOp(const std::string& name, double flops, simgrid::s4u::Host* host);
+  void execute();
 
 public:
   static ExecOpPtr create(const std::string& name, double flops, simgrid::s4u::Host* host);
-  void execute();
+  void set_host(simgrid::s4u::Host* host);
 };
 
 class CommOp : public Operation {
@@ -74,11 +80,14 @@ private:
   simgrid::s4u::Host* destination_;
 
   CommOp(const std::string& name, double bytes, simgrid::s4u::Host* source, simgrid::s4u::Host* destination);
+  void execute();
 
 public:
   static CommOpPtr create(const std::string& name, double bytes, simgrid::s4u::Host* source,
                           simgrid::s4u::Host* destination);
-  void execute();
+  void set_source(simgrid::s4u::Host* source);
+  void set_destination(simgrid::s4u::Host* destination);
+  
 };
 } // namespace simgrid::plugins
 #endif
\ No newline at end of file