diff options
| author | Mica White <botahamec@outlook.com> | 2024-03-10 20:21:00 -0400 |
|---|---|---|
| committer | Mica White <botahamec@outlook.com> | 2024-03-10 20:21:00 -0400 |
| commit | fe67aa262f1b04fb6c38683d9221c3a2fafcc35a (patch) | |
| tree | 91366e032219f5e29ff4ba993598ae581aefa829 /src/mutex/guard.rs | |
| parent | e8d25c9e6e7d5c3a5a14219fc77ea98760cef790 (diff) | |
Reorganization
Diffstat (limited to 'src/mutex/guard.rs')
| -rw-r--r-- | src/mutex/guard.rs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/mutex/guard.rs b/src/mutex/guard.rs new file mode 100644 index 0000000..b4005e1 --- /dev/null +++ b/src/mutex/guard.rs @@ -0,0 +1,39 @@ +use std::marker::PhantomData; +use std::ops::{Deref, DerefMut}; + +use lock_api::RawMutex; + +use crate::key::Keyable; + +use super::{Mutex, MutexGuard, MutexRef}; + +impl<'a, 'key: 'a, T: ?Sized + 'a, Key: Keyable, R: RawMutex> Deref + for MutexGuard<'a, 'key, T, Key, R> +{ + type Target = T; + + fn deref(&self) -> &Self::Target { + &self.mutex + } +} + +impl<'a, 'key: 'a, T: ?Sized + 'a, Key: Keyable, R: RawMutex> DerefMut + for MutexGuard<'a, 'key, T, Key, R> +{ + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.mutex + } +} + +impl<'a, 'key: 'a, T: ?Sized + 'a, Key: Keyable, R: RawMutex> MutexGuard<'a, 'key, T, Key, R> { + /// Create a guard to the given mutex. Undefined if multiple guards to the + /// same mutex exist at once. + #[must_use] + pub(super) const unsafe fn new(mutex: &'a Mutex<T, R>, thread_key: Key) -> Self { + Self { + mutex: MutexRef(mutex), + thread_key, + _phantom: PhantomData, + } + } +} |
