X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a801388e1d66c1dec6094831d746ecf90181bd43..d0d1912b2262e2aaf06b39115de5f846e2a86efe:/src/kernel/EngineImpl.hpp diff --git a/src/kernel/EngineImpl.hpp b/src/kernel/EngineImpl.hpp index deb566443d..5095243a11 100644 --- a/src/kernel/EngineImpl.hpp +++ b/src/kernel/EngineImpl.hpp @@ -10,8 +10,10 @@ #include #include #include +#include #include +#include #include #include @@ -24,8 +26,15 @@ class EngineImpl { std::unordered_map netpoints_; 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_; - std::unordered_map> models_by_type_; + std::vector models_; + 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; @@ -43,21 +52,15 @@ public: /** * @brief Add a model to engine list * - * @param type Model type (network, disk, etc) * @param model Pointer to model - * @param is_default Is this the default model for this type of resource in this exp + * @param list List of dependencies for this model */ - void add_model(resource::Model::Type type, std::shared_ptr model, bool is_default = false); - /** @brief Get current default model for a resource type */ - resource::Model* get_default_model(resource::Model::Type type) const; - - /** @brief Get list of models created for a resource type */ - const std::vector& get_model_list(resource::Model::Type type); + 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_; } + const std::vector& get_all_models() const { return models_; } - routing::NetZoneImpl* netzone_root_ = nullptr; static EngineImpl* get_instance() { return simgrid::s4u::Engine::get_instance()->pimpl; } actor::ActorCodeFactory get_function(const std::string& name) { @@ -67,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