pub struct OwnedProtect {
sexp: SEXP,
armed: bool,
_nosend: PhantomData<Rc<()>>,
}Expand description
A single-object RAII guard: PROTECT on create, UNPROTECT(1) on drop.
Use this for simple cases where you’re protecting a single value and
don’t need the batching benefits of ProtectScope.
§Example
ⓘ
unsafe fn allocate_and_fill() -> SEXP {
let guard = OwnedProtect::new(Rf_allocVector(REALSXP, 10));
fill_vector(guard.get());
// Return the SEXP - guard drops and unprotects on this line.
// This is safe because no GC can occur between unprotect and return.
guard.get()
}§Warning: Stack Ordering
OwnedProtect uses UNPROTECT(1), which removes the top of the protection
stack. If you have nested protections from other sources, the drop order matters!
For complex scenarios, prefer ProtectScope which unprotects all its values
at once when dropped.
Fields§
§sexp: SEXP§armed: bool§_nosend: PhantomData<Rc<()>>Implementations§
Trait Implementations§
Source§impl Deref for OwnedProtect
impl Deref for OwnedProtect
Source§impl Drop for OwnedProtect
impl Drop for OwnedProtect
Auto Trait Implementations§
impl !Send for OwnedProtect
impl !Sync for OwnedProtect
impl Freeze for OwnedProtect
impl RefUnwindSafe for OwnedProtect
impl Unpin for OwnedProtect
impl UnsafeUnpin for OwnedProtect
impl UnwindSafe for OwnedProtect
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> SizeHint for Twhere
T: ?Sized,
impl<T> SizeHint for Twhere
T: ?Sized,
Source§default fn lower_bound(&self) -> usize
default fn lower_bound(&self) -> usize
🔬This is a nightly-only experimental API. (
core_io_internals)Returns a lower bound on the number of elements this container-like item
contains.
For example, an array
[u8; 12] could return any value between 0 and
12 inclusively as a correct implementation. Read moreSource§impl<T> SizedTypeProperties for T
impl<T> SizedTypeProperties for T
Source§#[doc(hidden)]const SIZE: usize = _
#[doc(hidden)]const SIZE: usize = _
🔬This is a nightly-only experimental API. (
sized_type_properties)Source§#[doc(hidden)]const ALIGN: usize = _
#[doc(hidden)]const ALIGN: usize = _
🔬This is a nightly-only experimental API. (
sized_type_properties)Source§#[doc(hidden)]const ALIGNMENT: Alignment = _
#[doc(hidden)]const ALIGNMENT: Alignment = _
🔬This is a nightly-only experimental API. (
ptr_alignment_type)Source§#[doc(hidden)]const IS_ZST: bool = _
#[doc(hidden)]const IS_ZST: bool = _
🔬This is a nightly-only experimental API. (
sized_type_properties)Source§#[doc(hidden)]const LAYOUT: Layout = _
#[doc(hidden)]const LAYOUT: Layout = _
🔬This is a nightly-only experimental API. (
sized_type_properties)Source§#[doc(hidden)]const MAX_SLICE_LEN: usize = _
#[doc(hidden)]const MAX_SLICE_LEN: usize = _
🔬This is a nightly-only experimental API. (
sized_type_properties)The largest safe length for a
[Self]. Read moreLayout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 16 bytes