namespace simgrid {
namespace s4u {
-void Exec::start()
+Activity* Exec::start()
{
- pimpl_ = simcall_execution_start(nullptr, flops_amount_, 1 / priority_, 0.);
+ 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()
{
- this->wait(-1);
+ simcall_execution_wait(pimpl_);
+ state_ = finished;
+ return this;
}
-void Exec::wait(double timeout)
+Activity* Exec::wait(double timeout)
{
- simcall_execution_wait(pimpl_);
+ THROW_UNIMPLEMENTED;
+ return this;
}
bool Exec::test()
this->start();
}
+ if (simcall_execution_test(pimpl_)) {
+ state_ = finished;
+ return true;
+ }
+
return false;
}
ExecPtr Exec::setPriority(double priority)
{
+ xbt_assert(state_ == inited, "Cannot change the priority of an exec after its start");
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 || 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;
+}
+
double Exec::getRemains()
{
return simgrid::simix::kernelImmediate(
[this]() { return boost::static_pointer_cast<simgrid::kernel::activity::ExecImpl>(pimpl_)->remains(); });
}
+double Exec::getRemainingRatio()
+{
+ return simgrid::simix::kernelImmediate(
+ [this]() { return boost::static_pointer_cast<simgrid::kernel::activity::ExecImpl>(pimpl_)->remainingRatio(); });
+}
void intrusive_ptr_release(simgrid::s4u::Exec* e)
{