+void ConditionWaitSimcall::serialize(std::stringstream& stream) const
+{
+ THROW_UNIMPLEMENTED;
+}
+std::string ConditionWaitSimcall::to_string() const
+{
+ return "ConditionWait(cond_id:" + ptr_to_id<activity::ConditionVariableImpl const>(get_cond()) +
+ " mutex_id:" + std::to_string(get_mutex()->get_id()) + ")";
+}
+
+ActorJoinSimcall::ActorJoinSimcall(ActorImpl* actor, ActorImpl* other, double timeout)
+ : SimcallObserver(actor), other_(s4u::ActorPtr(other->get_iface())), timeout_(timeout)
+{
+}
+bool ActorJoinSimcall::is_enabled()
+{
+ return other_->get_impl()->wannadie();
+}
+void ActorJoinSimcall::serialize(std::stringstream& stream) const
+{
+ stream << (short)mc::Transition::Type::ACTOR_JOIN << ' ';
+ stream << other_->get_pid() << ' ' << (timeout_ > 0);
+}
+std::string ActorJoinSimcall::to_string() const
+{
+ return "ActorJoin(pid:" + std::to_string(other_->get_pid()) + ")";
+}
+
+void ObjectAccessSimcallObserver::serialize(std::stringstream& stream) const
+{
+ stream << (short)mc::Transition::Type::OBJECT_ACCESS << ' ';
+ stream << object_ << ' ' << get_owner()->get_pid();
+}
+std::string ObjectAccessSimcallObserver::to_string() const
+{
+ return "ObjectAccess(obj:" + ptr_to_id<ObjectAccessSimcallItem const>(object_) +
+ " owner:" + std::to_string(get_owner()->get_pid()) + ")";
+}
+bool ObjectAccessSimcallObserver::is_visible() const
+{
+ return get_owner() != get_issuer();
+}
+ActorImpl* ObjectAccessSimcallObserver::get_owner() const
+{
+ return object_->simcall_owner_;
+}
+