X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/76d6142db426f3e11da8367dbad7b1c39fec3165..8535ee1c8c2c9fa3bb09e2ef3e5eafab5e9d4565:/include/simgrid/s4u/Engine.hpp diff --git a/include/simgrid/s4u/Engine.hpp b/include/simgrid/s4u/Engine.hpp index a50747fa79..eabfef26d9 100644 --- a/include/simgrid/s4u/Engine.hpp +++ b/include/simgrid/s4u/Engine.hpp @@ -27,7 +27,10 @@ namespace s4u { class XBT_PUBLIC Engine { public: /** Constructor, taking the command line parameters of your main function */ - Engine(int* argc, char** argv); + explicit Engine(int* argc, char** argv); + /** Currently, only one instance is allowed to exist. This is why you can't copy or move it */ + Engine(const Engine&) = delete; + Engine(Engine&&) = delete; ~Engine(); /** Finalize the default engine and all its dependencies */ @@ -95,6 +98,7 @@ protected: public: size_t get_host_count(); std::vector get_all_hosts(); + std::vector get_filtered_hosts(std::function filter); simgrid::s4u::Host* host_by_name(std::string name); simgrid::s4u::Host* host_by_name_or_null(std::string name); @@ -107,17 +111,20 @@ public: simgrid::s4u::Storage* storage_by_name_or_null(std::string name); std::vector get_all_netpoints(); + simgrid::kernel::routing::NetPoint* netpoint_by_name_or_null(std::string name); - /** @brief Retrieve the root netzone, containing all others */ - simgrid::s4u::NetZone* getNetRoot(); + simgrid::s4u::NetZone* get_netzone_root(); + void set_netzone_root(s4u::NetZone* netzone); - simgrid::s4u::NetZone* getNetzoneByNameOrNull(const char* name); + simgrid::s4u::NetZone* netzone_by_name_or_null(const char* name); - /** @brief Retrieves all netzones of the same type than the subtype of the whereto vector */ - template void getNetzoneByType(std::vector * whereto) { netzoneByTypeRecursive(getNetRoot(), whereto); } - - /** @brief Retrieve the netcard of the given name (or nullptr if not found) */ - simgrid::kernel::routing::NetPoint* getNetpointByNameOrNull(std::string name); + /** @brief Retrieves all netzones of the type indicated by the template argument */ + template std::vector filter_netzones_by_type() + { + std::vector res; + filter_netzones_by_type_recursive(get_netzone_root(), &res); + return res; + } /** Returns whether SimGrid was initialized yet -- mostly for internal use */ static bool is_initialized(); @@ -131,9 +138,8 @@ public: */ void set_config(std::string str); - simgrid::kernel::EngineImpl* pimpl; - private: + simgrid::kernel::EngineImpl* pimpl; static s4u::Engine* instance_; //////////////// Deprecated functions @@ -194,9 +200,8 @@ public: return get_all_hosts(); } XBT_ATTRIB_DEPRECATED_v323("Please use Engine::get_link_count()") size_t getLinkCount() { return get_link_count(); } - XBT_ATTRIB_DEPRECATED_v323("Please use Engine::get_link_list()") - XBT_ATTRIB_DEPRECATED_v322("Engine::getLinkList() is deprecated in favor of Engine::get_all_links(). Please " - "switch before v3.22") void getLinkList(std::vector* list); + XBT_ATTRIB_DEPRECATED_v322("Engine::getLinkList() is deprecated in favor of Engine::get_all_links(). Please " + "switch before v3.22") void getLinkList(std::vector* list); XBT_ATTRIB_DEPRECATED_v323("Please use Engine::get_link_list()") std::vector getAllLinks() { return get_all_links(); @@ -208,6 +213,27 @@ public: XBT_ATTRIB_DEPRECATED_v323("Please use Engine::get_clock()") static double getClock() { return get_clock(); } XBT_ATTRIB_DEPRECATED_v323("Please use Engine::get_all_netpoints()") void getNetpointList( std::vector* list); + XBT_ATTRIB_DEPRECATED_v323("Please use Engine::netpoint_by_name_or_null()") + simgrid::kernel::routing::NetPoint* getNetpointByNameOrNull(std::string name) + { + return netpoint_by_name_or_null(name); + } + XBT_ATTRIB_DEPRECATED_v323("Please use Engine::get_netzone_root()") simgrid::s4u::NetZone* getNetRoot() + { + return get_netzone_root(); + } + XBT_ATTRIB_DEPRECATED_v323( + "Please use Engine::netzone_by_name_or_null()") simgrid::s4u::NetZone* getNetzoneByNameOrNull(const char* name) + { + return netzone_by_name_or_null(name); + } + template + XBT_ATTRIB_DEPRECATED_v323("Please use Engine::filter_netzones_by_type()") void getNetzoneByType( + std::vector* whereto) + { + filter_netzones_by_type_recursive(get_netzone_root(), whereto); + } + XBT_ATTRIB_DEPRECATED_v323("Please use Engine::get_instance()") static s4u::Engine* getInstance() { return get_instance(); @@ -227,9 +253,6 @@ extern XBT_PUBLIC xbt::signal on_platform_created; * (ie, after any configuration change and just before the resource creation) */ extern XBT_PUBLIC xbt::signal on_platform_creation; -/** Callback fired when some configuration has be done directly in the XML file */ -extern XBT_PUBLIC xbt::signal on_config_in_platform_done; - /** Callback fired when the main simulation loop ends, just before the end of Engine::run() */ extern XBT_PUBLIC xbt::signal on_simulation_end; @@ -239,10 +262,10 @@ extern XBT_PUBLIC xbt::signal on_time_advance; /** Callback fired when the time cannot jump because of inter-actors deadlock */ extern XBT_PUBLIC xbt::signal on_deadlock; -template XBT_PRIVATE void netzoneByTypeRecursive(s4u::NetZone* current, std::vector* whereto) +template XBT_PRIVATE void filter_netzones_by_type_recursive(s4u::NetZone* current, std::vector* whereto) { for (auto const& elem : *(current->getChildren())) { - netzoneByTypeRecursive(elem, whereto); + filter_netzones_by_type_recursive(elem, whereto); if (elem == dynamic_cast(elem)) whereto->push_back(dynamic_cast(elem)); }