1#[cfg(not(all(test, loom)))]
2pub(crate) mod sync {
3 pub(crate) mod atomic {
4 #[cfg(not(feature = "extra-platforms"))]
5 pub(crate) use core::sync::atomic::{AtomicPtr, AtomicUsize, Ordering};
6 #[cfg(feature = "extra-platforms")]
7 pub(crate) use extra_platforms::{AtomicPtr, AtomicUsize, Ordering};
8
9 pub(crate) trait AtomicMut<T> {
10 fn with_mut<F, R>(&mut self, f: F) -> R
11 where
12 F: FnOnce(&mut *mut T) -> R;
13 }
14
15 impl<T> AtomicMut<T> for AtomicPtr<T> {
16 fn with_mut<F, R>(&mut self, f: F) -> R
17 where
18 F: FnOnce(&mut *mut T) -> R,
19 {
20 f(self.get_mut())
21 }
22 }
23 }
24}
25
26#[cfg(all(test, loom))]
27pub(crate) mod sync {
28 pub(crate) mod atomic {
29 pub(crate) use loom::sync::atomic::{AtomicPtr, AtomicUsize, Ordering};
30
31 pub(crate) trait AtomicMut<T> {}
32 }
33}