Lines Matching defs:B

103 /// [`Backend`] specified as the generic parameter `B`.
106 pub struct Lock<T: ?Sized, B: Backend> {
109 state: Opaque<B::State>,
123 unsafe impl<T: ?Sized + Send, B: Backend> Send for Lock<T, B> {}
127 unsafe impl<T: ?Sized + Send, B: Backend> Sync for Lock<T, B> {}
129 impl<T, B: Backend> Lock<T, B> {
142 B::init(slot, name.as_char_ptr(), key.as_ptr())
148 impl<B: Backend> Lock<(), B> {
160 pub unsafe fn from_raw<'a>(ptr: *mut B::State) -> &'a Self {
162 // - By the safety contract `ptr` must point to a valid initialised instance of `B::State`
166 // `B::State`.
171 impl<T: ?Sized, B: Backend> Lock<T, B> {
174 pub fn lock(&self) -> Guard<'_, T, B> {
177 let state = unsafe { B::lock(self.state.get()) };
188 pub fn try_lock(&self) -> Option<Guard<'_, T, B>> {
191 unsafe { B::try_lock(self.state.get()).map(|state| Guard::new(self, state)) }
201 pub struct Guard<'a, T: ?Sized, B: Backend> {
202 pub(crate) lock: &'a Lock<T, B>,
203 pub(crate) state: B::GuardState,
208 unsafe impl<T: Sync + ?Sized, B: Backend> Sync for Guard<'_, T, B> {}
210 impl<'a, T: ?Sized, B: Backend> Guard<'a, T, B> {
222 /// fn assert_held<T, B: Backend>(guard: &Guard<'_, T, B>, lock: &Lock<T, B>) {
237 pub fn lock_ref(&self) -> &'a Lock<T, B> {
243 unsafe { B::unlock(self.lock.state.get(), &self.state) };
247 unsafe { B::relock(self.lock.state.get(), &mut self.state) });
278 impl<T: ?Sized, B: Backend> core::ops::Deref for Guard<'_, T, B> {
288 impl<T: ?Sized, B: Backend> core::ops::DerefMut for Guard<'_, T, B>
299 impl<T: ?Sized, B: Backend> Drop for Guard<'_, T, B> {
303 unsafe { B::unlock(self.lock.state.get(), &self.state) };
307 impl<'a, T: ?Sized, B: Backend> Guard<'a, T, B> {
314 pub unsafe fn new(lock: &'a Lock<T, B>, state: B::GuardState) -> Self {
316 unsafe { B::assert_is_held(lock.state.get()) };