From: Christian Heinrich Date: Fri, 1 Jun 2018 17:59:09 +0000 (+0200) Subject: [S4U] Engine: Support retrieving actors via the engine X-Git-Tag: v3.20~164 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/ff6d4d968f880f2c5d9854e7786034fd27f8b868 [S4U] Engine: Support retrieving actors via the engine --- diff --git a/include/simgrid/s4u/Engine.hpp b/include/simgrid/s4u/Engine.hpp index 8d9477c734..5e2c7d80f5 100644 --- a/include/simgrid/s4u/Engine.hpp +++ b/include/simgrid/s4u/Engine.hpp @@ -106,6 +106,10 @@ public: std::vector get_all_links(); std::vector get_filtered_links(std::function filter); + size_t get_actor_count(); + std::vector get_all_actors(); + std::vector get_filtered_actors(std::function filter); + size_t get_storage_count(); std::vector get_all_storages(); simgrid::s4u::Storage* storage_by_name(std::string name); diff --git a/src/s4u/s4u_Engine.cpp b/src/s4u/s4u_Engine.cpp index c311f1d182..209600c706 100644 --- a/src/s4u/s4u_Engine.cpp +++ b/src/s4u/s4u_Engine.cpp @@ -14,6 +14,7 @@ #include "simgrid/s4u/NetZone.hpp" #include "simgrid/s4u/Storage.hpp" #include "simgrid/simix.h" +#include "src/simix/smx_private.hpp" // For access to simix_global->process_list #include "src/instr/instr_private.hpp" #include "src/kernel/EngineImpl.hpp" #include "src/surf/network_interface.hpp" @@ -204,6 +205,31 @@ std::vector Engine::get_filtered_links(std::function filter) return filtered_list; } +size_t Engine::get_actor_count() +{ + return simix_global->process_list.size(); +} + +std::vector Engine::get_all_actors() +{ + std::vector actor_list; + actor_list.push_back(simgrid::s4u::Actor::self()); + for (auto& kv : simix_global->process_list) { + actor_list.push_back(kv.second->iface()); + } + return actor_list; +} + +std::vector Engine::get_filtered_actors(std::function filter) +{ + std::vector actor_list; + for (auto& kv : simix_global->process_list) { + if (filter(kv.second->iface())) + actor_list.push_back(kv.second->iface()); + } + return actor_list; +} + void Engine::run() { if (MC_is_active()) {