-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);
-XBT_PUBLIC const char* sg_actor_get_name(sg_actor_t actor);
-XBT_PUBLIC sg_host_t sg_actor_get_host(sg_actor_t actor);
-XBT_PUBLIC const char* sg_actor_get_property_value(sg_actor_t actor, const char* name);
-XBT_PUBLIC xbt_dict_t sg_actor_get_properties(sg_actor_t actor);
+XBT_PUBLIC size_t sg_actor_count();
+XBT_PUBLIC sg_actor_t* sg_actor_list();
+
+XBT_PUBLIC sg_actor_t sg_actor_create_(const char* name, sg_host_t host, xbt_main_func_t code, int argc,
+ const char* const* argv);
+static inline sg_actor_t sg_actor_create(const char* name, sg_host_t host, xbt_main_func_t code, int argc,
+ char* const* argv)
+{
+ return sg_actor_create_(name, host, code, argc, (const char* const*)argv);
+}
+XBT_PUBLIC sg_actor_t sg_actor_init(const char* name, sg_host_t host);
+/** Start the previously initialized actor.
+ *
+ * Note that argv is copied over, so you should free your own copy once the actor is started. */
+XBT_PUBLIC void sg_actor_start_(sg_actor_t actor, xbt_main_func_t code, int argc, const char* const* argv);
+static inline void sg_actor_start(sg_actor_t actor, xbt_main_func_t code, int argc, char* const* argv)
+{
+ sg_actor_start_(actor, code, argc, (const char* const*)argv);
+}
+XBT_PUBLIC void sg_actor_set_stacksize(sg_actor_t actor, unsigned size);
+
+XBT_ATTRIB_NORETURN XBT_PUBLIC void sg_actor_exit();
+XBT_PUBLIC void sg_actor_on_exit(void_f_int_pvoid_t fun, void* data);
+
+XBT_PUBLIC aid_t sg_actor_get_pid(const_sg_actor_t actor);
+XBT_PUBLIC aid_t sg_actor_get_ppid(const_sg_actor_t actor);
+XBT_PUBLIC sg_actor_t sg_actor_by_pid(aid_t pid);
+XBT_PUBLIC const char* sg_actor_get_name(const_sg_actor_t actor);
+XBT_PUBLIC sg_host_t sg_actor_get_host(const_sg_actor_t actor);
+XBT_PUBLIC const char* sg_actor_get_property_value(const_sg_actor_t actor, const char* name);
+XBT_PUBLIC xbt_dict_t sg_actor_get_properties(const_sg_actor_t actor);