]> git.proxmox.com Git - rustc.git/blame - vendor/arrayvec/src/maybe_uninit.rs
New upstream version 1.52.1+dfsg1
[rustc.git] / vendor / arrayvec / src / maybe_uninit.rs
CommitLineData
f035d41b
XL
1
2
3use crate::array::Array;
4use std::mem::MaybeUninit as StdMaybeUninit;
5
6#[derive(Copy)]
7pub struct MaybeUninit<T> {
8 inner: StdMaybeUninit<T>,
9}
10
11impl<T> Clone for MaybeUninit<T>
12 where T: Copy
13{
14 fn clone(&self) -> Self { *self }
15}
16
17impl<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}