1 use std::fmt; 2 use std::ops::{Deref, DerefMut}; 3 4 /// `AtomicPtr` providing an additional `load_unsync` function. 5 pub(crate) struct AtomicPtr<T> { 6 inner: std::sync::atomic::AtomicPtr<T>, 7 } 8 9 impl<T> AtomicPtr<T> { new(ptr: *mut T) -> AtomicPtr<T>10 pub(crate) fn new(ptr: *mut T) -> AtomicPtr<T> { 11 let inner = std::sync::atomic::AtomicPtr::new(ptr); 12 AtomicPtr { inner } 13 } 14 } 15 16 impl<T> Deref for AtomicPtr<T> { 17 type Target = std::sync::atomic::AtomicPtr<T>; 18 deref(&self) -> &Self::Target19 fn deref(&self) -> &Self::Target { 20 &self.inner 21 } 22 } 23 24 impl<T> DerefMut for AtomicPtr<T> { deref_mut(&mut self) -> &mut Self::Target25 fn deref_mut(&mut self) -> &mut Self::Target { 26 &mut self.inner 27 } 28 } 29 30 impl<T> fmt::Debug for AtomicPtr<T> { fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result31 fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result { 32 self.deref().fmt(fmt) 33 } 34 } 35