-/*
-std::string MutexLockSimcall::to_string(int times_considered) const
-{
- auto mutex = get_mutex();
- std::string res = SimcallObserver::to_string(times_considered) + (blocking_ ? "Mutex LOCK" : "Mutex TRYLOCK");
- res += "(locked = " + std::to_string(mutex->is_locked());
- res += ", owner = " + std::to_string(mutex->get_owner() ? mutex->get_owner()->get_pid() : -1);
- res += ", sleeping = n/a)";
- return res;
-}*/
-
-bool MutexLockSimcall::is_enabled()
-{
- return not blocking_ || get_mutex()->get_owner() == nullptr || get_mutex()->get_owner() == get_issuer();
-}
-
-bool ConditionWaitSimcall::is_enabled()
-{
- static bool warned = false;
- if (not warned) {
- XBT_INFO("Using condition variables in model-checked code is still experimental. Use at your own risk");
- warned = true;
- }
- return true;
-}
-
-bool SemAcquireSimcall::is_enabled()
-{
- static bool warned = false;
- if (not warned) {
- XBT_INFO("Using semaphore in model-checked code is still experimental. Use at your own risk");
- warned = true;
- }
- return true;
-}
-
-ActivityTestanySimcall::ActivityTestanySimcall(ActorImpl* actor, const std::vector<activity::ActivityImpl*>& activities)
- : ResultingSimcall(actor, -1), activities_(activities)
-{
-}
-
-int ActivityTestanySimcall::get_max_consider()
-{
- indexes_.clear();
- // list all the activities that are ready
- for (unsigned i = 0; i < activities_.size(); i++)
- if (activities_[i]->test(get_issuer()))
- indexes_.push_back(i);
- return indexes_.size() + 1;
-}
-
-void ActivityTestanySimcall::prepare(int times_considered)
+ActorJoinSimcall::ActorJoinSimcall(ActorImpl* actor, ActorImpl* other, double timeout)
+ : SimcallObserver(actor), other_(s4u::ActorPtr(other->get_iface())), timeout_(timeout)