Struct CppUniquePtrPin

Source
pub struct CppUniquePtrPin<T: UniquePtrTarget>(/* private fields */);
Expand description

Any newtype wrapper which causes the contained UniquePtr target to obey C++ reference semantics rather than Rust reference semantics. That is, multiple aliasing mutable C++ references may exist to the contents.

C++ references are permitted to alias one another, and commonly do. Rust references must alias according only to the narrow rules of the borrow checker.

Implementations§

Source§

impl<T: UniquePtrTarget> CppUniquePtrPin<T>

Source

pub fn new(item: UniquePtr<T>) -> Self

Imprison the type within a CppPin. This eliminates any remaining Rust references (since we take the item by value) and this object subsequently only vends C++ style references, not Rust references.

Source

pub fn as_ptr(&self) -> *const T

Get an immutable pointer to the underlying object.

Methods from Deref<Target = CppMutRef<T>>§

Source

pub fn as_mut_ptr(&self) -> *mut T

Retrieve the underlying C++ pointer.

Methods from Deref<Target = CppRef<T>>§

Source

pub fn as_ptr(&self) -> *const T

Retrieve the underlying C++ pointer.

Source

pub unsafe fn as_ref(&self) -> &T

Get a regular Rust reference out of this C++ reference.

§Safety

Callers must guarantee that the referent is not modified by any other C++ or Rust code while the returned reference exists. Callers must also guarantee that no mutable Rust reference is created to the referent while the returned reference exists.

Callers must also be sure that the C++ reference is properly aligned, not null, pointing to valid data, etc.

Source

pub fn const_cast(&self) -> CppMutRef<T>

Create a mutable version of this reference, roughly equivalent to C++ const_cast.

The opposite is to use AsCppRef::as_cpp_ref on a CppMutRef to obtain a CppRef.

§Safety

Because we never dereference a CppRef in Rust, this cannot create undefined behavior within Rust and is therefore not unsafe. It is however generally unwise, just as it is in C++. Use sparingly.

Trait Implementations§

Source§

impl<T: UniquePtrTarget> AsCppMutRef<T> for CppUniquePtrPin<T>

Source§

fn as_cpp_mut_ref(&mut self) -> CppMutRef<T>

Returns a mutable reference which obeys C++ reference semantics
Source§

impl<T: UniquePtrTarget> AsCppRef<T> for CppUniquePtrPin<T>

Source§

fn as_cpp_ref(&self) -> CppRef<T>

Returns a reference which obeys C++ reference semantics
Source§

impl<T: UniquePtrTarget> Deref for CppUniquePtrPin<T>

Source§

type Target = CppMutRef<T>

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.

Auto Trait Implementations§

§

impl<T> Freeze for CppUniquePtrPin<T>

§

impl<T> RefUnwindSafe for CppUniquePtrPin<T>
where T: RefUnwindSafe,

§

impl<T> !Send for CppUniquePtrPin<T>

§

impl<T> !Sync for CppUniquePtrPin<T>

§

impl<T> Unpin for CppUniquePtrPin<T>

§

impl<T> UnwindSafe for CppUniquePtrPin<T>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.