if (self_context == nullptr)
return simgrid::s4u::ActorPtr();
- return simgrid::s4u::ActorPtr(&self_context->process()->getIface());
+ return self_context->process()->iface();
}
ActorPtr Actor::createActor(const char* name, s4u::Host* host, std::function<void()> code)
{
- // TODO, when autorestart is used, the std::function is copied so the new
- // instance will get a fresh (reinitialized) state. Is this what we want?
- smx_actor_t process = simcall_process_create(name, std::move(code), nullptr, host, nullptr, 0);
- return ActorPtr(&process->getIface());
+ smx_actor_t actor = simcall_process_create(name, std::move(code), nullptr, host, nullptr);
+ return actor->iface();
}
ActorPtr Actor::createActor(const char* name, s4u::Host* host, const char* function, std::vector<std::string> args)
{
simgrid::simix::ActorCodeFactory& factory = SIMIX_get_actor_code_factory(function);
simgrid::simix::ActorCode code = factory(std::move(args));
- smx_actor_t process = simcall_process_create(name, std::move(code), nullptr, host, nullptr, 0);
- return ActorPtr(&process->getIface());
+ smx_actor_t actor = simcall_process_create(name, std::move(code), nullptr, host, nullptr);
+ return actor->iface();
}
// ***** Actor methods *****
simcall_process_auto_restart_set(pimpl_,autorestart);
}
+void Actor::migrate(Host* new_host)
+{
+ simcall_process_set_host(pimpl_, new_host);
+}
+
s4u::Host* Actor::host()
{
return this->pimpl_->host;
}
+const char* Actor::cname()
+{
+ return this->pimpl_->name.c_str();
+}
+
simgrid::xbt::string Actor::name()
{
return this->pimpl_->name;
return this->pimpl_->ppid;
}
+void Actor::suspend()
+{
+ simcall_process_suspend(pimpl_);
+}
+
+void Actor::resume()
+{
+ simcall_process_resume(pimpl_);
+}
+
void Actor::setKillTime(double time) {
simcall_process_set_kill_time(pimpl_,time);
}
}
void Actor::kill(int pid) {
- msg_process_t process = SIMIX_process_from_PID(pid);
+ smx_actor_t process = SIMIX_process_from_PID(pid);
if(process != nullptr) {
simcall_process_kill(process);
} else {
{
smx_actor_t process = SIMIX_process_from_PID(pid);
if (process != nullptr)
- return ActorPtr(&process->getIface());
+ return process->iface();
else
- return nullptr;
+ return ActorPtr();
}
void Actor::killAll() {
return res;
}
-void send(MailboxPtr chan, void *payload, size_t simulatedSize) {
+void send(MailboxPtr chan, void* payload, double simulatedSize)
+{
Comm& c = Comm::send_init(chan);
c.setRemains(simulatedSize);
c.setSrcData(payload);
return SIMIX_process_self()->ppid;
}
+std::string name()
+{
+ return SIMIX_process_self()->name;
+}
+
+Host* host()
+{
+ return SIMIX_process_self()->host;
+}
+
+void suspend()
+{
+ simcall_process_suspend(SIMIX_process_self());
+}
+
+void resume()
+{
+ simcall_process_resume(SIMIX_process_self());
+}
+
+void kill()
+{
+ simcall_process_kill(SIMIX_process_self());
+}
+
+void migrate(Host* new_host)
+{
+ simcall_process_set_host(SIMIX_process_self(), new_host);
+}
}
}
}