]> AND Public Git Repository - simgrid.git/blobdiff - src/bindings/python/simgrid_python.cpp
Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Remove old deprecated aliases for runtime options.
[simgrid.git] / src / bindings / python / simgrid_python.cpp
index f900c97a91c4fca1656b566b2e203be2077cab29..fc492d5b2dee62e9e50b9bb1e1d94c2b980c2cb1 100644 (file)
@@ -31,6 +31,7 @@
 #include <simgrid/s4u/Mailbox.hpp>
 #include <simgrid/version.h>
 
+#include <algorithm>
 #include <memory>
 #include <string>
 #include <vector>
@@ -46,7 +47,7 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(python, "python");
 
 namespace {
 
-static std::string get_simgrid_version()
+std::string get_simgrid_version()
 {
   int major;
   int minor;
@@ -151,14 +152,11 @@ PYBIND11_MODULE(simgrid, m)
   /* Class Engine */
   py::class_<Engine>(m, "Engine", "Simulation Engine")
       .def(py::init([](std::vector<std::string> args) {
-        static char noarg[] = {'\0'};
-        int argc            = static_cast<int>(args.size());
-        std::unique_ptr<char* []> argv(new char*[argc + 1]);
-        for (int i = 0; i != argc; ++i)
-          argv[i] = args[i].empty() ? noarg : &args[i].front();
-        argv[argc] = nullptr;
+        auto argc           = static_cast<int>(args.size());
+        std::vector<char*> argv(args.size() + 1); // argv[argc] is nullptr
+        std::transform(begin(args), end(args), begin(argv), [](std::string& s) { return &s.front(); });
         // Currently this can be dangling, we should wrap this somehow.
-        return new simgrid::s4u::Engine(&argc, argv.get());
+        return new simgrid::s4u::Engine(&argc, argv.data());
       }))
       .def_static("get_clock", &Engine::get_clock,
                   "The simulation time, ie the amount of simulated seconds since the simulation start.")
@@ -346,7 +344,7 @@ PYBIND11_MODULE(simgrid, m)
       .def("is_daemon", &Actor::is_daemon,
            "Returns True if that actor is a daemon and will be terminated automatically when the last non-daemon actor "
            "terminates.")
-      .def("join", py::overload_cast<double>(&Actor::join), py::call_guard<GilScopedRelease>(),
+      .def("join", py::overload_cast<double>(&Actor::join, py::const_), py::call_guard<GilScopedRelease>(),
            "Wait for the actor to finish (more info in the C++ documentation).", py::arg("timeout"))
       .def("kill", &Actor::kill, py::call_guard<GilScopedRelease>(), "Kill that actor")
       .def("kill_all", &Actor::kill_all, py::call_guard<GilScopedRelease>(), "Kill all actors but the caller.")