#define INCLUDE_SIMGRID_ENGINE_H_
#include <simgrid/forward.h>
+#include <stddef.h>
SG_BEGIN_DECL /* C interface */
/** Initialize the SimGrid engine, taking the command line parameters of your main function. */
*/
XBT_PUBLIC void sg_config_continue_after_help();
+XBT_PUBLIC void simgrid_get_all_hosts(size_t* host_count, sg_host_t** hosts);
+
SG_END_DECL
#endif /* INCLUDE_SIMGRID_ENGINE_H_ */
#include "surf/surf.hpp" // routing_platf. FIXME:KILLME. SOON
#include <simgrid/Exception.hpp>
+#include <algorithm>
#include <string>
XBT_LOG_NEW_CATEGORY(s4u, "Log channels of the S4U (Simgrid for you) interface");
{
return simgrid::s4u::Engine::get_instance()->get_actor_count();
}
+
+void simgrid_get_all_hosts(size_t* host_count, sg_host_t** hosts)
+{
+ simgrid::s4u::Engine* e = simgrid::s4u::Engine::get_instance();
+ *host_count = e->get_host_count();
+ std::vector<simgrid::s4u::Host*> list = e->get_all_hosts();
+
+ auto last = std::remove_if(begin(list), end(list), [](const simgrid::s4u::Host* host) {
+ return not host || not host->get_netpoint() || not host->get_netpoint()->is_host();
+ });
+ std::sort(begin(list), last,
+ [](const simgrid::s4u::Host* a, const simgrid::s4u::Host* b) { return a->get_name() < b->get_name(); });
+
+ *hosts = static_cast<sg_host_t*>(xbt_malloc(sizeof(sg_host_t) * (*host_count)));
+ for (size_t i = 0; i < *host_count; i++)
+ (*hosts)[i] = list[i];
+}