A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
| inline |
side by side
Merge branch 'master' into klement
[simgrid.git]
/
src
/
s4u
/
s4u_Actor.cpp
diff --git
a/src/s4u/s4u_Actor.cpp
b/src/s4u/s4u_Actor.cpp
index
5937ec7
..
b9cc222
100644
(file)
--- a/
src/s4u/s4u_Actor.cpp
+++ b/
src/s4u/s4u_Actor.cpp
@@
-96,7
+96,7
@@
void intrusive_ptr_release(const Actor* actor)
{
intrusive_ptr_release(actor->pimpl_);
}
-int Actor::get_refcount()
+int Actor::get_refcount()
const
{
return pimpl_->get_refcount();
}
@@
-118,7
+118,7
@@
void Actor::join(double timeout)
issuer->simcall_answer();
} else {
kernel::activity::ActivityImplPtr sync = issuer->join(target, timeout);
- sync->register_simcall(&issuer->simcall);
+ sync->register_simcall(&issuer->simcall
_
);
}
});
}
@@
-155,11
+155,11
@@
void Actor::set_host(Host* new_host)
const s4u::Host* previous_location = get_host();
kernel::actor::simcall([this, new_host]() {
- if (pimpl_->waiting_synchro != nullptr) {
+ if (pimpl_->waiting_synchro
_
!= nullptr) {
// The actor is blocked on an activity. If it's an exec, migrate it too.
// FIXME: implement the migration of other kinds of activities
kernel::activity::ExecImplPtr exec =
- boost::dynamic_pointer_cast<kernel::activity::ExecImpl>(pimpl_->waiting_synchro);
+ boost::dynamic_pointer_cast<kernel::activity::ExecImpl>(pimpl_->waiting_synchro
_
);
xbt_assert(exec.get() != nullptr, "We can only migrate blocked actors when they are blocked on executions.");
exec->migrate(new_host);
}
@@
-234,7
+234,7
@@
void Actor::resume()
s4u::Actor::on_resume(*this);
}
-bool Actor::is_suspended()
+bool Actor::is_suspended()
const
{
return pimpl_->is_suspended();
}
@@
-245,7
+245,7
@@
void Actor::set_kill_time(double kill_time)
}
/** @brief Get the kill time of an actor(or 0 if unset). */
-double Actor::get_kill_time()
+double Actor::get_kill_time()
const
{
return pimpl_->get_kill_time();
}
@@
-327,7
+327,7
@@
void sleep_for(double duration)
return;
}
kernel::activity::ActivityImplPtr sync = issuer->sleep(duration);
- sync->register_simcall(&issuer->simcall);
+ sync->register_simcall(&issuer->simcall
_
);
});
Actor::on_wake_up(*issuer->ciface());
@@
-471,6
+471,23
@@
void migrate(Host* new_host) // deprecated
} // namespace simgrid
/* **************************** Public C interface *************************** */
+size_t sg_actor_count()
+{
+ return simgrid::s4u::Engine::get_instance()->get_actor_count();
+}
+
+sg_actor_t* sg_actor_list()
+{
+ const simgrid::s4u::Engine* e = simgrid::s4u::Engine::get_instance();
+ size_t actor_count = e->get_actor_count();
+ xbt_assert(actor_count > 0, "There is no actor!");
+ std::vector<simgrid::s4u::ActorPtr> actors = e->get_all_actors();
+
+ sg_actor_t* res = xbt_new(sg_actor_t, actors.size());
+ for (size_t i = 0; i < actor_count; i++)
+ res[i] = actors[i].get();
+ return res;
+}
sg_actor_t sg_actor_init(const char* name, sg_host_t host)
{
@@
-607,7
+624,7
@@
void sg_actor_resume(sg_actor_t actor)
*
* This checks whether an actor is suspended or not by inspecting the task on which it was waiting for the completion.
*/
-int sg_actor_is_suspended(sg_actor_t actor)
+int sg_actor_is_suspended(
const_
sg_actor_t actor)
{
return actor->is_suspended();
}
@@
-811,7
+828,7
@@
void sg_actor_data_set(sg_actor_t actor, void* userdata)
* The on_exit functions are the functions executed when your process is killed.
* You should use them to free the data used by your process.
*/
-void sg_actor_on_exit(
int
_f_int_pvoid_t fun, void* data)
+void sg_actor_on_exit(
void
_f_int_pvoid_t fun, void* data)
{
simgrid::s4u::this_actor::on_exit([fun, data](bool failed) { fun(failed ? 1 /*FAILURE*/ : 0 /*SUCCESS*/, data); });
}