diff options
Diffstat (limited to 'src/lockable.rs')
| -rw-r--r-- | src/lockable.rs | 44 |
1 files changed, 44 insertions, 0 deletions
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<T: Send, R: RawRwLock + Send + Sync> Lockable for RwLock<T, R> { } } +impl<T: Send, R: RawMutex + Send + Sync> LockableIntoInner for Mutex<T, R> { + type Inner = T; + + fn into_inner(self) -> Self::Inner { + self.into_inner() + } +} + +impl<T: Send, R: RawMutex + Send + Sync> LockableAsMut for Mutex<T, R> { + type Inner = T; + + fn as_mut(&mut self) -> &mut Self::Inner { + self.get_mut() + } +} + +impl<T: Send, R: RawRwLock + Send + Sync> LockableIntoInner for RwLock<T, R> { + type Inner = T; + + fn into_inner(self) -> Self::Inner { + self.into_inner() + } +} + +impl<T: Send, R: RawRwLock + Send + Sync> LockableAsMut for RwLock<T, R> { + type Inner = T; + + fn as_mut(&mut self) -> &mut Self::Inner { + AsMut::as_mut(self) + } +} + unsafe impl<T: Send, R: RawRwLock + Send + Sync> Sharable for RwLock<T, R> {} unsafe impl<T: Send, R: RawMutex + Send + Sync> OwnedLockable for Mutex<T, R> {} |
