]>
Commit | Line | Data |
---|---|---|
f035d41b XL |
1 | |
2 | ||
3 | use crate::array::Array; | |
4 | use std::mem::MaybeUninit as StdMaybeUninit; | |
5 | ||
6 | #[derive(Copy)] | |
7 | pub struct MaybeUninit<T> { | |
8 | inner: StdMaybeUninit<T>, | |
9 | } | |
10 | ||
11 | impl<T> Clone for MaybeUninit<T> | |
12 | where T: Copy | |
13 | { | |
14 | fn clone(&self) -> Self { *self } | |
15 | } | |
16 | ||
17 | impl<T> MaybeUninit<T> { | |
18 | /// Create a new MaybeUninit with uninitialized interior | |
5869c6ff | 19 | pub const unsafe fn uninitialized() -> Self { |
f035d41b XL |
20 | MaybeUninit { inner: StdMaybeUninit::uninit() } |
21 | } | |
22 | ||
23 | /// Create a new MaybeUninit from the value `v`. | |
24 | pub fn from(v: T) -> Self { | |
25 | MaybeUninit { inner: StdMaybeUninit::new(v) } | |
26 | } | |
27 | ||
28 | // Raw pointer casts written so that we don't reference or access the | |
29 | // uninitialized interior value | |
30 | ||
31 | /// Return a raw pointer to the start of the interior array | |
32 | pub fn ptr(&self) -> *const T::Item | |
33 | where T: Array | |
34 | { | |
35 | self.inner.as_ptr() as *const T::Item | |
36 | } | |
37 | ||
38 | /// Return a mut raw pointer to the start of the interior array | |
39 | pub fn ptr_mut(&mut self) -> *mut T::Item | |
40 | where T: Array | |
41 | { | |
42 | self.inner.as_mut_ptr() as *mut T::Item | |
43 | } | |
44 | } |