diff options
Diffstat (limited to 'vendor/hashbrown-0.12.3/src/scopeguard.rs')
-rw-r--r-- | vendor/hashbrown-0.12.3/src/scopeguard.rs | 74 |
1 files changed, 0 insertions, 74 deletions
diff --git a/vendor/hashbrown-0.12.3/src/scopeguard.rs b/vendor/hashbrown-0.12.3/src/scopeguard.rs deleted file mode 100644 index f85e6ab0e..000000000 --- a/vendor/hashbrown-0.12.3/src/scopeguard.rs +++ /dev/null @@ -1,74 +0,0 @@ -// Extracted from the scopeguard crate -use core::{ - mem, - ops::{Deref, DerefMut}, - ptr, -}; - -pub struct ScopeGuard<T, F> -where - F: FnMut(&mut T), -{ - dropfn: F, - value: T, -} - -#[inline] -pub fn guard<T, F>(value: T, dropfn: F) -> ScopeGuard<T, F> -where - F: FnMut(&mut T), -{ - ScopeGuard { dropfn, value } -} - -impl<T, F> ScopeGuard<T, F> -where - F: FnMut(&mut T), -{ - #[inline] - pub fn into_inner(guard: Self) -> T { - // Cannot move out of Drop-implementing types, so - // ptr::read the value and forget the guard. - unsafe { - let value = ptr::read(&guard.value); - // read the closure so that it is dropped, and assign it to a local - // variable to ensure that it is only dropped after the guard has - // been forgotten. (In case the Drop impl of the closure, or that - // of any consumed captured variable, panics). - let _dropfn = ptr::read(&guard.dropfn); - mem::forget(guard); - value - } - } -} - -impl<T, F> Deref for ScopeGuard<T, F> -where - F: FnMut(&mut T), -{ - type Target = T; - #[inline] - fn deref(&self) -> &T { - &self.value - } -} - -impl<T, F> DerefMut for ScopeGuard<T, F> -where - F: FnMut(&mut T), -{ - #[inline] - fn deref_mut(&mut self) -> &mut T { - &mut self.value - } -} - -impl<T, F> Drop for ScopeGuard<T, F> -where - F: FnMut(&mut T), -{ - #[inline] - fn drop(&mut self) { - (self.dropfn)(&mut self.value); - } -} |