Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
properly split init and start for IO activities
[simgrid.git] / src / s4u / s4u_Engine.cpp
index 42ec9d8..ccdce47 100644 (file)
@@ -1,6 +1,6 @@
 /* s4u::Engine Simulation Engine and global functions. */
 
-/* Copyright (c) 2006-2018. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2006-2019. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
@@ -34,14 +34,13 @@ xbt::signal<void(void)> on_deadlock;
 
 Engine* Engine::instance_ = nullptr; /* That singleton is awful, but I don't see no other solution right now. */
 
-Engine::Engine(int* argc, char** argv)
+Engine::Engine(int* argc, char** argv) : pimpl(new kernel::EngineImpl())
 {
   xbt_assert(s4u::Engine::instance_ == nullptr,
              "It is currently forbidden to create more than one instance of s4u::Engine");
   TRACE_global_init();
   SIMIX_global_init(argc, argv);
 
-  pimpl                  = new kernel::EngineImpl();
   s4u::Engine::instance_ = this;
 }
 
@@ -80,6 +79,10 @@ void Engine::register_function(std::string name, int (*code)(int, char**))
 {
   SIMIX_function_register(name, code);
 }
+void Engine::register_function(std::string name, void (*code)(std::vector<std::string>))
+{
+  SIMIX_function_register(name, code);
+}
 void Engine::register_default(int (*code)(int, char**))
 {
   SIMIX_function_register_default(code);
@@ -93,16 +96,7 @@ size_t Engine::get_host_count()
 {
   return pimpl->hosts_.size();
 }
-/** @brief Fills the passed list with all hosts found in the platform
- *  @deprecated Please prefer Engine::getAllHosts()
- */
-void Engine::getHostList(std::vector<Host*>* list)
-{
-  for (auto const& kv : pimpl->hosts_)
-    list->push_back(kv.second);
-}
 
-/** @brief Returns the list of all hosts found in the platform */
 std::vector<Host*> Engine::get_all_hosts()
 {
   std::vector<Host*> res;
@@ -132,18 +126,18 @@ void Engine::host_unregister(std::string name)
   pimpl->hosts_.erase(name);
 }
 
-/** @brief Find an host from its name.
+/** @brief Find a host from its name.
  *
  *  @throw std::invalid_argument if the searched host does not exist.
  */
 simgrid::s4u::Host* Engine::host_by_name(std::string name)
 {
   if (pimpl->hosts_.find(name) == pimpl->hosts_.end())
-    throw std::invalid_argument(std::string("Host not found: ") + name);
+    throw std::invalid_argument(std::string("Host not found: '") + name + std::string("'"));
   return pimpl->hosts_.at(name);
 }
 
-/** @brief Find an host from its name (or nullptr if that host does not exist) */
+/** @brief Find a host from its name (or nullptr if that host does not exist) */
 simgrid::s4u::Host* Engine::host_by_name_or_null(std::string name)
 {
   auto host = pimpl->hosts_.find(name);
@@ -366,28 +360,32 @@ void Engine::set_config(std::string str)
 } // namespace simgrid
 
 /* **************************** Public C interface *************************** */
-void sg_engine_load_platform(const char* file)
+void simgrid_init(int* argc, char** argv)
+{
+  simgrid::s4u::Engine e(argc, argv);
+}
+void simgrid_load_platform(const char* file)
 {
   simgrid::s4u::Engine::get_instance()->load_platform(file);
 }
 
-void sg_engine_load_deployment(const char* file)
+void simgrid_load_deployment(const char* file)
 {
   simgrid::s4u::Engine::get_instance()->load_deployment(file);
 }
-void sg_engine_run()
+void simgrid_run()
 {
   simgrid::s4u::Engine::get_instance()->run();
 }
-void sg_engine_register_function(const char* name, int (*code)(int, char**))
+void simgrid_register_function(const char* name, int (*code)(int, char**))
 {
   simgrid::s4u::Engine::get_instance()->register_function(name, code);
 }
-void sg_engine_register_default(int (*code)(int, char**))
+void simgrid_register_default(int (*code)(int, char**))
 {
   simgrid::s4u::Engine::get_instance()->register_default(code);
 }
-double sg_engine_get_clock()
+double simgrid_get_clock()
 {
   return simgrid::s4u::Engine::get_clock();
 }