From 2376ccee97c99d5c47c09fcf308a97aaf785a29e Mon Sep 17 00:00:00 2001 From: Botahamec Date: Thu, 26 Sep 2024 22:58:13 -0400 Subject: Better into_inner and get_mut implementations --- src/lockable.rs | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'src/lockable.rs') diff --git a/src/lockable.rs b/src/lockable.rs index 9f44981..6eced32 100644 --- a/src/lockable.rs +++ b/src/lockable.rs @@ -151,6 +151,18 @@ pub unsafe trait Lockable { unsafe fn read_guard(&self) -> Self::ReadGuard<'_>; } +pub trait LockableIntoInner: Lockable { + type Inner; + + fn into_inner(self) -> Self::Inner; +} + +pub trait LockableAsMut: Lockable { + type Inner; + + fn as_mut(&mut self) -> &mut Self::Inner; +} + /// A marker trait to indicate that multiple readers can access the lock at a /// time. /// @@ -258,6 +270,38 @@ unsafe impl Lockable for RwLock { } } +impl LockableIntoInner for Mutex { + type Inner = T; + + fn into_inner(self) -> Self::Inner { + self.into_inner() + } +} + +impl LockableAsMut for Mutex { + type Inner = T; + + fn as_mut(&mut self) -> &mut Self::Inner { + self.get_mut() + } +} + +impl LockableIntoInner for RwLock { + type Inner = T; + + fn into_inner(self) -> Self::Inner { + self.into_inner() + } +} + +impl LockableAsMut for RwLock { + type Inner = T; + + fn as_mut(&mut self) -> &mut Self::Inner { + AsMut::as_mut(self) + } +} + unsafe impl Sharable for RwLock {} unsafe impl OwnedLockable for Mutex {} -- cgit v1.2.3