Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Use default destructor for resource::Model.
[simgrid.git] / include / simgrid / kernel / resource / Model.hpp
index 9a614ca..91da47c 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2004-2018. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2004-2019. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
@@ -6,6 +6,7 @@
 #ifndef SIMGRID_KERNEL_RESOURCE_MODEL_HPP
 #define SIMGRID_KERNEL_RESOURCE_MODEL_HPP
 
+#include <memory>
 #include <simgrid/kernel/resource/Action.hpp>
 
 namespace simgrid {
@@ -20,37 +21,42 @@ class XBT_PUBLIC Model {
 public:
   /** @brief Possible update mechanisms */
   enum class UpdateAlgo {
-    Full, /**< Full update mechanism: the remaining time of every action is recomputed at each step */
-    Lazy  /**< Lazy update mechanism: only the modified actions get recomputed.
+    FULL, /**< Full update mechanism: the remaining time of every action is recomputed at each step */
+    LAZY  /**< Lazy update mechanism: only the modified actions get recomputed.
                    It may be slower than full if your system is tightly coupled to the point where every action
                    gets recomputed anyway. In that case, you'd better not try to be cleaver with lazy and go for
                    a simple full update.  */
   };
 
   explicit Model(Model::UpdateAlgo algo);
+  Model(const Model&) = delete;
+  Model& operator=(const Model&) = delete;
 
-  virtual ~Model();
+  virtual ~Model() = default;
 
   /** @brief Get the set of [actions](@ref Action) in *inited* state */
-  Action::StateSet* get_inited_action_set() const { return inited_action_set_; }
+  Action::StateSet* get_inited_action_set() { return &inited_action_set_; }
 
   /** @brief Get the set of [actions](@ref Action) in *started* state */
-  Action::StateSet* get_started_action_set() const { return started_action_set_; }
+  Action::StateSet* get_started_action_set() { return &started_action_set_; }
 
   /** @brief Get the set of [actions](@ref Action) in *failed* state */
-  Action::StateSet* get_failed_action_set() const { return failed_action_set_; }
+  Action::StateSet* get_failed_action_set() { return &failed_action_set_; }
 
   /** @brief Get the set of [actions](@ref Action) in *finished* state */
-  Action::StateSet* get_finished_action_set() const { return finished_action_set_; }
+  Action::StateSet* get_finished_action_set() { return &finished_action_set_; }
+
+  /** @brief Get the set of [actions](@ref Action) in *ignored* state */
+  Action::StateSet* get_ignored_action_set() { return &ignored_action_set_; }
 
   /** @brief Get the set of modified [actions](@ref Action) */
   Action::ModifiedSet* get_modified_set() const;
 
   /** @brief Get the maxmin system of the current Model */
-  lmm::System* get_maxmin_system() const { return maxmin_system_; }
+  lmm::System* get_maxmin_system() const { return maxmin_system_.get(); }
 
   /** @brief Set the maxmin system of the current Model */
-  void set_maxmin_system(lmm::System* system) { maxmin_system_ = system; }
+  void set_maxmin_system(lmm::System* system);
 
   /** @brief Get the update algorithm of the current Model */
   UpdateAlgo get_update_algorithm() const { return update_algorithm_; }
@@ -68,6 +74,13 @@ public:
   virtual double next_occuring_event_lazy(double now);
   virtual double next_occuring_event_full(double now);
 
+private:
+  Action* extract_action(Action::StateSet* list);
+
+public:
+  Action* extract_done_action();
+  Action* extract_failed_action();
+
   /**
    * @brief Update action to the current time
    *
@@ -86,16 +99,24 @@ public:
   virtual bool next_occuring_event_is_idempotent() { return true; }
 
 private:
-  lmm::System* maxmin_system_           = nullptr;
+  std::unique_ptr<lmm::System> maxmin_system_;
   const UpdateAlgo update_algorithm_;
-  Action::StateSet* inited_action_set_  = new Action::StateSet(); /**< Created not started */
-  Action::StateSet* started_action_set_  = new Action::StateSet(); /**< Started not done */
-  Action::StateSet* failed_action_set_  = new Action::StateSet(); /**< Done with failure */
-  Action::StateSet* finished_action_set_ = new Action::StateSet(); /**< Done successful */
+  Action::StateSet inited_action_set_;   /**< Created not started */
+  Action::StateSet started_action_set_;  /**< Started not done */
+  Action::StateSet failed_action_set_;   /**< Done with failure */
+  Action::StateSet finished_action_set_; /**< Done successful */
+  Action::StateSet ignored_action_set_;  /**< not considered (failure detectors?) */
+
   ActionHeap action_heap_;
 };
 
 } // namespace resource
 } // namespace kernel
 } // namespace simgrid
+
+/** @ingroup SURF_models
+ *  @brief List of initialized models
+ */
+XBT_PUBLIC_DATA std::vector<simgrid::kernel::resource::Model*> all_existing_models;
+
 #endif