X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/082ed926323cda37d5f5cdfe5fdeb06c7884d036..19e1048a7009c4144b0f361ad85fb9dff44761ea:/include/simgrid/s4u/Engine.hpp diff --git a/include/simgrid/s4u/Engine.hpp b/include/simgrid/s4u/Engine.hpp index 9397c3feab..074a242bc5 100644 --- a/include/simgrid/s4u/Engine.hpp +++ b/include/simgrid/s4u/Engine.hpp @@ -24,9 +24,13 @@ namespace s4u { * This is a singleton containing all the main functions of the simulation. */ class XBT_PUBLIC Engine { +#ifndef DOXYGEN friend simgrid::kernel::EngineImpl; +#endif public: + /** Constructor, taking only the name of your main function */ + explicit Engine(std::string name); /** Constructor, taking the command line parameters of your main function */ explicit Engine(int* argc, char** argv); /* Currently, only one instance is allowed to exist. This is why you can't copy or move it */ @@ -85,6 +89,7 @@ public: protected: #ifndef DOXYGEN + friend surf::HostImpl; friend Host; friend Link; friend Disk; @@ -116,14 +121,28 @@ public: std::vector get_all_links() const; std::vector get_filtered_links(const std::function& filter) const; Link* link_by_name(const std::string& name) const; + /** + * @brief Find a split-duplex link from its name. + * @throw std::invalid_argument if the searched link does not exist. + */ + SplitDuplexLink* split_duplex_link_by_name(const std::string& name) const; Link* link_by_name_or_null(const std::string& name) const; + Mailbox* mailbox_by_name_or_create(const std::string& name) const; + size_t get_actor_count() const; std::vector get_all_actors() const; std::vector get_filtered_actors(const std::function& filter) const; std::vector get_all_netpoints() const; kernel::routing::NetPoint* netpoint_by_name_or_null(const std::string& name) const; + /** + * @brief Get netpoint by its name + * + * @param name Netpoint name + * @throw std::invalid_argument if netpoint doesn't exist + */ + kernel::routing::NetPoint* netpoint_by_name(const std::string& name) const; NetZone* get_netzone_root() const; void set_netzone_root(const NetZone* netzone); @@ -133,16 +152,14 @@ public: /** * @brief Add a model to engine list * - * @param type Model type (network, disk, etc) - * @param model Pointer to model + * @param model Pointer to model + * @param dependencies List of dependencies for this model (optional) */ - void add_model(simgrid::kernel::resource::Model::Type type, std::shared_ptr model); - - /** @brief Get list of models created for a resource type */ - const std::vector& get_model_list(simgrid::kernel::resource::Model::Type type); + void add_model(std::shared_ptr model, + const std::vector& dependencies = {}); /** @brief Get list of all models managed by this engine */ - const std::vector>& get_all_models(); + const std::vector& get_all_models() const; /** @brief Retrieves all netzones of the type indicated by the template argument */ template std::vector get_filtered_netzones() const @@ -193,6 +210,7 @@ public: private: kernel::EngineImpl* const pimpl; static Engine* instance_; + void initialize(int* argc, char** argv); }; #ifndef DOXYGEN /* Internal use only, no need to expose it */