Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
add C interface to Actor::init and Actor::start
authorFrederic Suter <frederic.suter@cc.in2p3.fr>
Wed, 30 Oct 2019 17:44:05 +0000 (18:44 +0100)
committerFrederic Suter <frederic.suter@cc.in2p3.fr>
Wed, 30 Oct 2019 17:44:05 +0000 (18:44 +0100)
include/simgrid/actor.h
src/s4u/s4u_Actor.cpp

index 9b38ab5..3703f10 100644 (file)
@@ -20,6 +20,8 @@ SG_BEGIN_DECL()
     You should not access directly to the fields of the pointed structure, but always use the provided API to interact
     with actors.
  */
+XBT_PUBLIC sg_actor_t sg_actor_init(const char* name, sg_host_t host);
+XBT_PUBLIC void sg_actor_start(sg_actor_t actor, xbt_main_func_t code, int argc, char** argv);
 XBT_PUBLIC aid_t sg_actor_get_PID(sg_actor_t actor);
 XBT_PUBLIC aid_t sg_actor_get_PPID(sg_actor_t actor);
 XBT_PUBLIC sg_actor_t sg_actor_by_PID(aid_t pid);
index 5ec4612..8779aef 100644 (file)
@@ -43,6 +43,7 @@ Actor* Actor::self()
 
   return self_context->get_actor()->ciface();
 }
+
 ActorPtr Actor::init(const std::string& name, s4u::Host* host)
 {
   kernel::actor::ActorImpl* self = SIMIX_process_self();
@@ -440,6 +441,19 @@ void migrate(Host* new_host)
 
 /* **************************** Public C interface *************************** */
 
+sg_actor_t sg_actor_init(const char* name, sg_host_t host)
+{
+  return simgrid::s4u::Actor::init(name, host).get();
+}
+
+void sg_actor_start(sg_actor_t actor, xbt_main_func_t code, int argc, char** argv)
+{
+  simgrid::simix::ActorCode function;
+  if (code)
+    function = simgrid::xbt::wrap_main(code, argc, static_cast<const char* const*>(argv));
+  actor->start(std::move(function));
+}
+
 /** @ingroup m_actor_management
  * @brief Returns the process ID of @a actor.
  *