Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[S4U] Engine: Support retrieving actors via the engine
authorChristian Heinrich <franz-christian.heinrich@inria.fr>
Fri, 1 Jun 2018 17:59:09 +0000 (19:59 +0200)
committerChristian Heinrich <franz-christian.heinrich@inria.fr>
Fri, 1 Jun 2018 17:59:30 +0000 (19:59 +0200)
include/simgrid/s4u/Engine.hpp
src/s4u/s4u_Engine.cpp

index 8d9477c..5e2c7d8 100644 (file)
@@ -106,6 +106,10 @@ public:
   std::vector<Link*> get_all_links();
   std::vector<Link*> get_filtered_links(std::function<bool(Link*)> filter);
 
+  size_t get_actor_count();
+  std::vector<ActorPtr> get_all_actors();
+  std::vector<ActorPtr> get_filtered_actors(std::function<bool(ActorPtr)> filter);
+
   size_t get_storage_count();
   std::vector<Storage*> get_all_storages();
   simgrid::s4u::Storage* storage_by_name(std::string name);
index c311f1d..209600c 100644 (file)
@@ -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<Link*> Engine::get_filtered_links(std::function<bool(Link*)> filter)
   return filtered_list;
 }
 
+size_t Engine::get_actor_count()
+{
+  return simix_global->process_list.size();
+}
+
+std::vector<ActorPtr> Engine::get_all_actors()
+{
+  std::vector<ActorPtr> 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<ActorPtr> Engine::get_filtered_actors(std::function<bool(ActorPtr)> filter)
+{
+  std::vector<ActorPtr> 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()) {