+ if (is_parallel())
+ return kernel::actor::simcall(
+ [this]() { return boost::static_pointer_cast<kernel::activity::ExecImpl>(pimpl_)->get_par_remaining_ratio(); });
+ else
+ return kernel::actor::simcall(
+ [this]() { return boost::static_pointer_cast<kernel::activity::ExecImpl>(pimpl_)->get_seq_remaining_ratio(); });
+}
+
+bool Exec::is_assigned() const
+{
+ return not boost::static_pointer_cast<kernel::activity::ExecImpl>(pimpl_)->get_hosts().empty();
+}
+} // namespace s4u
+} // namespace simgrid
+
+/* **************************** Public C interface *************************** */
+void sg_exec_set_bound(sg_exec_t exec, double bound)
+{
+ exec->set_bound(bound);
+}
+
+const char* sg_exec_get_name(const_sg_exec_t exec)
+{
+ return exec->get_cname();
+}
+
+void sg_exec_set_name(sg_exec_t exec, const char* name)
+{
+ exec->set_name(name);
+}
+
+void sg_exec_set_host(sg_exec_t exec, sg_host_t new_host)
+{
+ exec->set_host(new_host);
+}
+
+double sg_exec_get_remaining(const_sg_exec_t exec)
+{
+ return exec->get_remaining();
+}
+
+double sg_exec_get_remaining_ratio(const_sg_exec_t exec)
+{
+ return exec->get_remaining_ratio();
+}
+
+void sg_exec_start(sg_exec_t exec)
+{
+ exec->vetoable_start();
+}
+
+void sg_exec_cancel(sg_exec_t exec)
+{
+ exec->cancel();
+ exec->unref();
+}
+
+int sg_exec_test(sg_exec_t exec)
+{
+ bool finished = exec->test();
+ if (finished)
+ exec->unref();
+ return finished;
+}
+
+sg_error_t sg_exec_wait(sg_exec_t exec)
+{
+ return sg_exec_wait_for(exec, -1.0);