- friend simgrid::simix::Mutex;
- simgrid::simix::Mutex* mutex_;
- Mutex(simgrid::simix::Mutex* mutex) : mutex_(mutex) {}
+ friend kernel::activity::MutexImpl;
+ friend XBT_PUBLIC void kernel::activity::intrusive_ptr_release(kernel::activity::MutexImpl* mutex);
+#endif
+
+ kernel::activity::MutexImpl* const pimpl_;
+ /* refcounting */
+ friend XBT_PUBLIC void intrusive_ptr_add_ref(const Mutex* mutex);
+ friend XBT_PUBLIC void intrusive_ptr_release(const Mutex* mutex);
+
+ explicit Mutex(kernel::activity::MutexImpl* mutex) : pimpl_(mutex) {}
+ ~Mutex() = default;
+#ifndef DOXYGEN
+ Mutex(Mutex const&) = delete; // No copy constructor; Use MutexPtr instead
+ Mutex& operator=(Mutex const&) = delete; // No direct assignment either. Use MutexPtr instead
+#endif