summaryrefslogtreecommitdiff
path: root/src/mutex
diff options
context:
space:
mode:
authorMica White <botahamec@outlook.com>2024-03-10 20:42:37 -0400
committerMica White <botahamec@outlook.com>2024-03-10 20:42:37 -0400
commit815c0adedd6207eb406c67ea09c2634f304f8adf (patch)
treeab3f8291f2315c6c46ea472260023c14a2880261 /src/mutex
parentfe67aa262f1b04fb6c38683d9221c3a2fafcc35a (diff)
More reorganization
Diffstat (limited to 'src/mutex')
-rw-r--r--src/mutex/guard.rs28
-rw-r--r--src/mutex/mutex_ref.rs33
2 files changed, 28 insertions, 33 deletions
diff --git a/src/mutex/guard.rs b/src/mutex/guard.rs
index b4005e1..5d249ee 100644
--- a/src/mutex/guard.rs
+++ b/src/mutex/guard.rs
@@ -7,6 +7,34 @@ use crate::key::Keyable;
use super::{Mutex, MutexGuard, MutexRef};
+impl<'a, T: ?Sized + 'a, R: RawMutex> Drop for MutexRef<'a, T, R> {
+ fn drop(&mut self) {
+ // safety: this guard is being destroyed, so the data cannot be
+ // accessed without locking again
+ unsafe { self.0.force_unlock() }
+ }
+}
+
+impl<'a, T: ?Sized + 'a, R: RawMutex> Deref for MutexRef<'a, T, R> {
+ type Target = T;
+
+ fn deref(&self) -> &Self::Target {
+ // safety: this is the only type that can use `value`, and there's
+ // a reference to this type, so there cannot be any mutable
+ // references to this value.
+ unsafe { &*self.0.value.get() }
+ }
+}
+
+impl<'a, T: ?Sized + 'a, R: RawMutex> DerefMut for MutexRef<'a, T, R> {
+ fn deref_mut(&mut self) -> &mut Self::Target {
+ // safety: this is the only type that can use `value`, and we have a
+ // mutable reference to this type, so there cannot be any other
+ // references to this value.
+ unsafe { &mut *self.0.value.get() }
+ }
+}
+
impl<'a, 'key: 'a, T: ?Sized + 'a, Key: Keyable, R: RawMutex> Deref
for MutexGuard<'a, 'key, T, Key, R>
{
diff --git a/src/mutex/mutex_ref.rs b/src/mutex/mutex_ref.rs
deleted file mode 100644
index 5222719..0000000
--- a/src/mutex/mutex_ref.rs
+++ /dev/null
@@ -1,33 +0,0 @@
-use std::ops::{Deref, DerefMut};
-
-use lock_api::RawMutex;
-
-use super::MutexRef;
-
-impl<'a, T: ?Sized + 'a, R: RawMutex> Drop for MutexRef<'a, T, R> {
- fn drop(&mut self) {
- // safety: this guard is being destroyed, so the data cannot be
- // accessed without locking again
- unsafe { self.0.force_unlock() }
- }
-}
-
-impl<'a, T: ?Sized + 'a, R: RawMutex> Deref for MutexRef<'a, T, R> {
- type Target = T;
-
- fn deref(&self) -> &Self::Target {
- // safety: this is the only type that can use `value`, and there's
- // a reference to this type, so there cannot be any mutable
- // references to this value.
- unsafe { &*self.0.value.get() }
- }
-}
-
-impl<'a, T: ?Sized + 'a, R: RawMutex> DerefMut for MutexRef<'a, T, R> {
- fn deref_mut(&mut self) -> &mut Self::Target {
- // safety: this is the only type that can use `value`, and we have a
- // mutable reference to this type, so there cannot be any other
- // references to this value.
- unsafe { &mut *self.0.value.get() }
- }
-}