Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
do not use sg_hosts_as_dynar in C++
authorFrederic Suter <frederic.suter@cc.in2p3.fr>
Thu, 6 Feb 2020 10:42:21 +0000 (11:42 +0100)
committerFrederic Suter <frederic.suter@cc.in2p3.fr>
Thu, 6 Feb 2020 12:19:24 +0000 (13:19 +0100)
src/bindings/lua/lua_host.cpp
teshsuite/simdag/is-router/is-router.cpp

index a9a7686..9189731 100644 (file)
@@ -6,6 +6,7 @@
 /* SimGrid Lua bindings                                                     */
 
 #include "lua_private.hpp"
+#include "simgrid/s4u/Engine.hpp"
 #include "simgrid/s4u/Host.hpp"
 #include <lauxlib.h>
 
@@ -86,9 +87,7 @@ static int l_host_get_name(lua_State * L)
  */
 static int l_host_number(lua_State * L)
 {
-  xbt_dynar_t hosts = sg_hosts_as_dynar();
-  lua_pushinteger(L, xbt_dynar_length(hosts));
-  xbt_dynar_free(&hosts);
+  lua_pushinteger(L, simgrid::s4u::Engine::get_instance()->get_host_count());
   return 1;
 }
 
@@ -103,15 +102,14 @@ static int l_host_number(lua_State * L)
 static int l_host_at(lua_State * L)
 {
   int index = luaL_checkinteger(L, 1);
-  xbt_dynar_t hosts = sg_hosts_as_dynar();
-  sg_host_t host = xbt_dynar_get_as(hosts,index - 1,sg_host_t);// lua indexing start by 1 (lua[1] <=> C[0])
+  std::vector<sg_host_t> hosts = simgrid::s4u::Engine::get_instance()->get_all_hosts();
+  sg_host_t host               = hosts[index - 1]; // lua indexing start by 1 (lua[1] <=> C[0])
   lua_newtable(L);              /* create a table, put the userdata on top of it */
   sg_host_t *lua_host = (sg_host_t *) lua_newuserdata(L, sizeof(sg_host_t));
   *lua_host = host;
   luaL_getmetatable(L, HOST_MODULE_NAME);
   lua_setmetatable(L, -2);
   lua_setfield(L, -2, HOST_FIELDNAME);        /* put the userdata as field of the table */
-  xbt_dynar_free(&hosts);
   return 1;
 }
 
index d5bed78..5acb60c 100644 (file)
@@ -16,8 +16,8 @@ int main(int argc, char **argv)
   SD_init(&argc, argv);
   SD_create_environment(argv[1]);
 
-  xbt_dynar_t hosts = sg_hosts_as_dynar();
-  std::printf("Host count: %zu, link number: %d\n", sg_host_count(), sg_link_count());
+  std::vector<sg_host_t> hosts = simgrid::s4u::Engine::get_instance()->get_all_hosts();
+  std::printf("Host count: %zu, link number: %d\n", hosts.size(), sg_link_count());
 
   std::vector<simgrid::kernel::routing::NetPoint*> netpoints =
       simgrid::s4u::Engine::get_instance()->get_all_netpoints();
@@ -26,9 +26,7 @@ int main(int argc, char **argv)
               return a->get_name() < b->get_name();
             });
 
-  int it;
-  sg_host_t host;
-  xbt_dynar_foreach(hosts, it, host) {
+  for (const auto& host : hosts) {
     const simgrid::kernel::routing::NetPoint* nc = host->get_netpoint();
     const char *type = "buggy";
     if (nc->is_router())
@@ -39,7 +37,6 @@ int main(int argc, char **argv)
       type = "host";
     std::printf("   - Seen: \"%s\". Type: %s\n", host->get_cname(), type);
   }
-  xbt_dynar_free(&hosts);
 
   std::printf("NetCards count: %zu\n", netpoints.size());
   for (auto const& nc : netpoints) {