mlua_codemp_patch/types/
sync.rs1#[cfg(feature = "send")]
2mod inner {
3 use parking_lot::{RawMutex, RawThreadId};
4 use std::sync::{Arc, Weak};
5
6 pub(crate) type XRc<T> = Arc<T>;
7 pub(crate) type XWeak<T> = Weak<T>;
8
9 pub(crate) type ReentrantMutex<T> = parking_lot::ReentrantMutex<T>;
10
11 pub(crate) type ReentrantMutexGuard<'a, T> = parking_lot::ReentrantMutexGuard<'a, T>;
12
13 pub(crate) type ArcReentrantMutexGuard<T> =
14 parking_lot::lock_api::ArcReentrantMutexGuard<RawMutex, RawThreadId, T>;
15}
16
17#[cfg(not(feature = "send"))]
18mod inner {
19 use std::ops::Deref;
20 use std::rc::{Rc, Weak};
21
22 pub(crate) type XRc<T> = Rc<T>;
23 pub(crate) type XWeak<T> = Weak<T>;
24
25 pub(crate) struct ReentrantMutex<T>(T);
26
27 impl<T> ReentrantMutex<T> {
28 #[inline(always)]
29 pub(crate) fn new(val: T) -> Self {
30 ReentrantMutex(val)
31 }
32
33 #[inline(always)]
34 pub(crate) fn lock(&self) -> ReentrantMutexGuard<T> {
35 ReentrantMutexGuard(&self.0)
36 }
37
38 #[inline(always)]
39 pub(crate) fn lock_arc(self: &XRc<Self>) -> ArcReentrantMutexGuard<T> {
40 ArcReentrantMutexGuard(Rc::clone(self))
41 }
42
43 #[inline(always)]
44 pub(crate) fn into_lock_arc(self: XRc<Self>) -> ArcReentrantMutexGuard<T> {
45 ArcReentrantMutexGuard(self)
46 }
47
48 #[inline(always)]
49 pub(crate) fn data_ptr(&self) -> *const T {
50 &self.0 as *const _
51 }
52 }
53
54 pub(crate) struct ReentrantMutexGuard<'a, T>(&'a T);
55
56 impl<'a, T> Deref for ReentrantMutexGuard<'a, T> {
57 type Target = T;
58
59 #[inline(always)]
60 fn deref(&self) -> &Self::Target {
61 self.0
62 }
63 }
64
65 pub(crate) struct ArcReentrantMutexGuard<T>(XRc<ReentrantMutex<T>>);
66
67 impl<T> Deref for ArcReentrantMutexGuard<T> {
68 type Target = T;
69
70 #[inline(always)]
71 fn deref(&self) -> &Self::Target {
72 &self.0 .0
73 }
74 }
75}
76
77pub(crate) use inner::{ArcReentrantMutexGuard, ReentrantMutex, ReentrantMutexGuard, XRc, XWeak};