aboutsummaryrefslogtreecommitdiff
path: root/src/unique_ptr.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/unique_ptr.rs')
-rw-r--r--src/unique_ptr.rs69
1 files changed, 34 insertions, 35 deletions
diff --git a/src/unique_ptr.rs b/src/unique_ptr.rs
index 836f4677..63a1ca78 100644
--- a/src/unique_ptr.rs
+++ b/src/unique_ptr.rs
@@ -6,10 +6,9 @@ use crate::ExternType;
use core::ffi::c_void;
use core::fmt::{self, Debug, Display};
use core::marker::PhantomData;
-use core::mem;
+use core::mem::{self, MaybeUninit};
use core::ops::{Deref, DerefMut};
use core::pin::Pin;
-use core::ptr;
/// Binding to C++ `std::unique_ptr<T, std::default_delete<T>>`.
#[repr(C)]
@@ -17,7 +16,7 @@ pub struct UniquePtr<T>
where
T: UniquePtrTarget,
{
- repr: *mut c_void,
+ repr: MaybeUninit<*mut c_void>,
ty: PhantomData<T>,
}
@@ -104,7 +103,7 @@ where
/// twice on the same raw pointer.
pub unsafe fn from_raw(raw: *mut T) -> Self {
UniquePtr {
- repr: T::__raw(raw),
+ repr: unsafe { T::__raw(raw) },
ty: PhantomData,
}
}
@@ -207,9 +206,9 @@ pub unsafe trait UniquePtrTarget {
#[doc(hidden)]
fn __typename(f: &mut fmt::Formatter) -> fmt::Result;
#[doc(hidden)]
- fn __null() -> *mut c_void;
+ fn __null() -> MaybeUninit<*mut c_void>;
#[doc(hidden)]
- fn __new(value: Self) -> *mut c_void
+ fn __new(value: Self) -> MaybeUninit<*mut c_void>
where
Self: Sized,
{
@@ -219,26 +218,26 @@ pub unsafe trait UniquePtrTarget {
unreachable!()
}
#[doc(hidden)]
- unsafe fn __raw(raw: *mut Self) -> *mut c_void;
+ unsafe fn __raw(raw: *mut Self) -> MaybeUninit<*mut c_void>;
#[doc(hidden)]
- unsafe fn __get(repr: *mut c_void) -> *const Self;
+ unsafe fn __get(repr: MaybeUninit<*mut c_void>) -> *const Self;
#[doc(hidden)]
- unsafe fn __release(repr: *mut c_void) -> *mut Self;
+ unsafe fn __release(repr: MaybeUninit<*mut c_void>) -> *mut Self;
#[doc(hidden)]
- unsafe fn __drop(repr: *mut c_void);
+ unsafe fn __drop(repr: MaybeUninit<*mut c_void>);
}
extern "C" {
#[link_name = "cxxbridge1$unique_ptr$std$string$null"]
- fn unique_ptr_std_string_null(this: *mut *mut c_void);
+ fn unique_ptr_std_string_null(this: *mut MaybeUninit<*mut c_void>);
#[link_name = "cxxbridge1$unique_ptr$std$string$raw"]
- fn unique_ptr_std_string_raw(this: *mut *mut c_void, raw: *mut CxxString);
+ fn unique_ptr_std_string_raw(this: *mut MaybeUninit<*mut c_void>, raw: *mut CxxString);
#[link_name = "cxxbridge1$unique_ptr$std$string$get"]
- fn unique_ptr_std_string_get(this: *const *mut c_void) -> *const CxxString;
+ fn unique_ptr_std_string_get(this: *const MaybeUninit<*mut c_void>) -> *const CxxString;
#[link_name = "cxxbridge1$unique_ptr$std$string$release"]
- fn unique_ptr_std_string_release(this: *mut *mut c_void) -> *mut CxxString;
+ fn unique_ptr_std_string_release(this: *mut MaybeUninit<*mut c_void>) -> *mut CxxString;
#[link_name = "cxxbridge1$unique_ptr$std$string$drop"]
- fn unique_ptr_std_string_drop(this: *mut *mut c_void);
+ fn unique_ptr_std_string_drop(this: *mut MaybeUninit<*mut c_void>);
}
unsafe impl UniquePtrTarget for CxxString {
@@ -247,30 +246,30 @@ unsafe impl UniquePtrTarget for CxxString {
f.write_str("CxxString")
}
#[doc(hidden)]
- fn __null() -> *mut c_void {
- let mut repr = ptr::null_mut::<c_void>();
+ fn __null() -> MaybeUninit<*mut c_void> {
+ let mut repr = MaybeUninit::uninit();
unsafe {
unique_ptr_std_string_null(&mut repr);
}
repr
}
#[doc(hidden)]
- unsafe fn __raw(raw: *mut Self) -> *mut c_void {
- let mut repr = ptr::null_mut::<c_void>();
- unique_ptr_std_string_raw(&mut repr, raw);
+ unsafe fn __raw(raw: *mut Self) -> MaybeUninit<*mut c_void> {
+ let mut repr = MaybeUninit::uninit();
+ unsafe { unique_ptr_std_string_raw(&mut repr, raw) }
repr
}
#[doc(hidden)]
- unsafe fn __get(repr: *mut c_void) -> *const Self {
- unique_ptr_std_string_get(&repr)
+ unsafe fn __get(repr: MaybeUninit<*mut c_void>) -> *const Self {
+ unsafe { unique_ptr_std_string_get(&repr) }
}
#[doc(hidden)]
- unsafe fn __release(mut repr: *mut c_void) -> *mut Self {
- unique_ptr_std_string_release(&mut repr)
+ unsafe fn __release(mut repr: MaybeUninit<*mut c_void>) -> *mut Self {
+ unsafe { unique_ptr_std_string_release(&mut repr) }
}
#[doc(hidden)]
- unsafe fn __drop(mut repr: *mut c_void) {
- unique_ptr_std_string_drop(&mut repr);
+ unsafe fn __drop(mut repr: MaybeUninit<*mut c_void>) {
+ unsafe { unique_ptr_std_string_drop(&mut repr) }
}
}
@@ -283,23 +282,23 @@ where
write!(f, "CxxVector<{}>", display(T::__typename))
}
#[doc(hidden)]
- fn __null() -> *mut c_void {
+ fn __null() -> MaybeUninit<*mut c_void> {
T::__unique_ptr_null()
}
#[doc(hidden)]
- unsafe fn __raw(raw: *mut Self) -> *mut c_void {
- T::__unique_ptr_raw(raw)
+ unsafe fn __raw(raw: *mut Self) -> MaybeUninit<*mut c_void> {
+ unsafe { T::__unique_ptr_raw(raw) }
}
#[doc(hidden)]
- unsafe fn __get(repr: *mut c_void) -> *const Self {
- T::__unique_ptr_get(repr)
+ unsafe fn __get(repr: MaybeUninit<*mut c_void>) -> *const Self {
+ unsafe { T::__unique_ptr_get(repr) }
}
#[doc(hidden)]
- unsafe fn __release(repr: *mut c_void) -> *mut Self {
- T::__unique_ptr_release(repr)
+ unsafe fn __release(repr: MaybeUninit<*mut c_void>) -> *mut Self {
+ unsafe { T::__unique_ptr_release(repr) }
}
#[doc(hidden)]
- unsafe fn __drop(repr: *mut c_void) {
- T::__unique_ptr_drop(repr);
+ unsafe fn __drop(repr: MaybeUninit<*mut c_void>) {
+ unsafe { T::__unique_ptr_drop(repr) }
}
}