namespace simgrid {
namespace s4u {
-void Exec::start()
+Activity* Exec::start()
{
pimpl_ = simcall_execution_start(nullptr, flops_amount_, 1 / priority_, 0., host_);
+ boost::static_pointer_cast<simgrid::kernel::activity::ExecImpl>(pimpl_)->setBound(bound_);
state_ = started;
+ return this;
}
-void Exec::wait()
+Activity* Exec::wait()
{
simcall_execution_wait(pimpl_);
+ state_ = finished;
+ return this;
}
-void Exec::wait(double timeout)
+Activity* Exec::wait(double timeout)
{
THROW_UNIMPLEMENTED;
+ return this;
}
bool Exec::test()
this->start();
}
+ if (simcall_execution_test(pimpl_)) {
+ state_ = finished;
+ return true;
+ }
+
return false;
}
priority_ = priority;
return this;
}
+
+ExecPtr Exec::setBound(double bound)
+{
+ xbt_assert(state_ == inited, "Cannot change the bound of an exec after its start");
+ bound_ = bound;
+ return this;
+}
+
ExecPtr Exec::setHost(Host* host)
{
- xbt_assert(state_ == inited, "Cannot change the host of an exec after its start");
+ xbt_assert(state_ == inited || state_ == started, "Cannot change the host of an exec once it's done (state: %d)", state_);
+ if (state_ == started)
+ boost::static_pointer_cast<simgrid::kernel::activity::ExecImpl>(pimpl_)->migrate(host);
host_ = host;
return this;
}