konst_macro_rules/
utils_1_56.rs1use core::mem::{ManuallyDrop, MaybeUninit};
2
3#[repr(C)]
4pub union Transmuter<F, T> {
5 pub from: ManuallyDrop<F>,
6 pub to: ManuallyDrop<T>,
7}
8
9#[repr(C)]
10pub union PtrToRef<'a, P: ?Sized> {
11 pub ptr: *const P,
12 pub reff: &'a P,
13}
14
15#[doc(hidden)]
16#[macro_export]
17macro_rules! __priv_transmute {
18 ($from:ty, $to:ty, $value:expr) => {{
19 $crate::__::ManuallyDrop::into_inner(
20 $crate::utils_1_56::Transmuter::<$from, $to> {
21 from: $crate::__::ManuallyDrop::new($value),
22 }
23 .to,
24 )
25 }};
26}
27
28#[doc(hidden)]
29#[macro_export]
30macro_rules! __priv_transmute_ref {
31 ($from:ty, $to:ty, $reference:expr) => {
32 match $reference {
33 ptr => {
34 let ptr: *const $from = ptr;
35 $crate::utils_1_56::PtrToRef::<$to> {
36 ptr: ptr as *const $to,
37 }
38 .reff
39 }
40 }
41 };
42}
43
44#[inline(always)]
45pub const fn uninit_array<T, const LEN: usize>() -> [MaybeUninit<T>; LEN] {
46 union MakeMUArray<T, const LEN: usize> {
47 unit: (),
48 array: ManuallyDrop<[MaybeUninit<T>; LEN]>,
49 }
50
51 unsafe { ManuallyDrop::into_inner(MakeMUArray { unit: () }.array) }
52}
53
54#[inline(always)]
55pub const unsafe fn array_assume_init<T, const N: usize>(md: [MaybeUninit<T>; N]) -> [T; N] {
56 crate::__priv_transmute! {[MaybeUninit<T>; N], [T; N], md}
57}