X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/b9d349f4e630752232d93f23b5cb3c33e02e0d05..d0d1912b2262e2aaf06b39115de5f846e2a86efe:/src/kernel/EngineImpl.hpp diff --git a/src/kernel/EngineImpl.hpp b/src/kernel/EngineImpl.hpp index 3e1585dff6..5095243a11 100644 --- a/src/kernel/EngineImpl.hpp +++ b/src/kernel/EngineImpl.hpp @@ -10,8 +10,10 @@ #include #include #include +#include #include +#include #include #include @@ -25,12 +27,14 @@ class EngineImpl { std::unordered_map registered_functions; // Maps function names to actor code actor::ActorCodeFactory default_function; // Function to use as a fallback when the provided name matches nothing std::vector models_; - struct ModelStruct { - int prio; - std::shared_ptr ptr; - }; - std::unordered_map models_prio_; + std::unordered_map> models_prio_; routing::NetZoneImpl* netzone_root_ = nullptr; + std::set daemons_; + std::vector actors_to_run_; + std::vector actors_that_ran_; + + std::vector> tasks; + std::vector> tasksTemp; friend s4u::Engine; @@ -51,7 +55,8 @@ public: * @param model Pointer to model * @param list List of dependencies for this model */ - void add_model(std::shared_ptr model, std::vector&& dep_models); + void add_model(std::shared_ptr model, + const std::vector& dep_models = {}); /** @brief Get list of all models managed by this engine */ const std::vector& get_all_models() const { return models_; } @@ -65,6 +70,26 @@ public: else return res->second; } + void add_daemon(actor::ActorImpl* d) { daemons_.insert(d); } + void rm_daemon(actor::ActorImpl* d); + void add_actor_to_run_list(actor::ActorImpl* a); + void add_actor_to_run_list_no_check(actor::ActorImpl* a); + bool has_actors_to_run() { return not actors_to_run_.empty(); } + const actor::ActorImpl* get_first_actor_to_run() const { return actors_to_run_.front(); } + const actor::ActorImpl* get_actor_to_run_at(unsigned long int i) const { return actors_to_run_[i]; } + unsigned long int get_actor_to_run_count() { return actors_to_run_.size(); } + + const std::vector& get_actors_to_run() const { return actors_to_run_; } + const std::vector& get_actors_that_ran() const { return actors_that_ran_; } + + bool execute_tasks(); + void add_task(xbt::Task&& t) { tasks.push_back(std::move(t)); } + void wake_all_waiting_actors() const; + void display_all_actor_status() const; + void run_all_actors(); + + /** @brief Run the main simulation loop. */ + void run(); }; } // namespace kernel