aboutsummaryrefslogtreecommitdiff
path: root/vendor/bytemuck/src/no_uninit.rs
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2024-07-19 15:37:58 +0300
committerValentin Popov <valentin@popov.link>2024-07-19 15:37:58 +0300
commita990de90fe41456a23e58bd087d2f107d321f3a1 (patch)
tree15afc392522a9e85dc3332235e311b7d39352ea9 /vendor/bytemuck/src/no_uninit.rs
parent3d48cd3f81164bbfc1a755dc1d4a9a02f98c8ddd (diff)
downloadfparkan-a990de90fe41456a23e58bd087d2f107d321f3a1.tar.xz
fparkan-a990de90fe41456a23e58bd087d2f107d321f3a1.zip
Deleted vendor folder
Diffstat (limited to 'vendor/bytemuck/src/no_uninit.rs')
-rw-r--r--vendor/bytemuck/src/no_uninit.rs80
1 files changed, 0 insertions, 80 deletions
diff --git a/vendor/bytemuck/src/no_uninit.rs b/vendor/bytemuck/src/no_uninit.rs
deleted file mode 100644
index 5fda0c9..0000000
--- a/vendor/bytemuck/src/no_uninit.rs
+++ /dev/null
@@ -1,80 +0,0 @@
-use crate::Pod;
-use core::num::{
- NonZeroI128, NonZeroI16, NonZeroI32, NonZeroI64, NonZeroI8, NonZeroIsize,
- NonZeroU128, NonZeroU16, NonZeroU32, NonZeroU64, NonZeroU8, NonZeroUsize,
-};
-
-/// Marker trait for "plain old data" types with no uninit (or padding) bytes.
-///
-/// The requirements for this is very similar to [`Pod`],
-/// except that it doesn't require that all bit patterns of the type are valid,
-/// i.e. it does not require the type to be [`Zeroable`][crate::Zeroable].
-/// This limits what you can do with a type of this kind, but also broadens the
-/// included types to things like C-style enums. Notably, you can only cast from
-/// *immutable* references to a [`NoUninit`] type into *immutable* references of
-/// any other type, no casting of mutable references or mutable references to
-/// slices etc.
-///
-/// [`Pod`] is a subset of [`NoUninit`], meaning that any `T: Pod` is also
-/// [`NoUninit`] but any `T: NoUninit` is not necessarily [`Pod`]. If possible,
-/// prefer implementing [`Pod`] directly. To get more [`Pod`]-like functionality
-/// for a type that is only [`NoUninit`], consider also implementing
-/// [`CheckedBitPattern`][crate::CheckedBitPattern].
-///
-/// # Derive
-///
-/// A `#[derive(NoUninit)]` macro is provided under the `derive` feature flag
-/// which will automatically validate the requirements of this trait and
-/// implement the trait for you for both enums and structs. This is the
-/// recommended method for implementing the trait, however it's also possible to
-/// do manually. If you implement it manually, you *must* carefully follow the
-/// below safety rules.
-///
-/// # Safety
-///
-/// The same as [`Pod`] except we disregard the rule about it must
-/// allow any bit pattern (i.e. it does not need to be
-/// [`Zeroable`][crate::Zeroable]). Still, this is a quite strong guarantee
-/// about a type, so *be careful* whem implementing it manually.
-///
-/// * The type must be inhabited (eg: no
-/// [Infallible](core::convert::Infallible)).
-/// * The type must not contain any uninit (or padding) bytes, either in the
-/// middle or on the end (eg: no `#[repr(C)] struct Foo(u8, u16)`, which has
-/// padding in the middle, and also no `#[repr(C)] struct Foo(u16, u8)`, which
-/// has padding on the end).
-/// * Structs need to have all fields also be `NoUninit`.
-/// * Structs need to be `repr(C)` or `repr(transparent)`. In the case of
-/// `repr(C)`, the `packed` and `align` repr modifiers can be used as long as
-/// all other rules end up being followed.
-/// * Enums need to have an explicit `#[repr(Int)]`
-/// * Enums must have only fieldless variants
-/// * It is disallowed for types to contain pointer types, `Cell`, `UnsafeCell`,
-/// atomics, and any other forms of interior mutability.
-/// * More precisely: A shared reference to the type must allow reads, and
-/// *only* reads. RustBelt's separation logic is based on the notion that a
-/// type is allowed to define a sharing predicate, its own invariant that must
-/// hold for shared references, and this predicate is the reasoning that allow
-/// it to deal with atomic and cells etc. We require the sharing predicate to
-/// be trivial and permit only read-only access.
-/// * There's probably more, don't mess it up (I mean it).
-pub unsafe trait NoUninit: Sized + Copy + 'static {}
-
-unsafe impl<T: Pod> NoUninit for T {}
-
-unsafe impl NoUninit for char {}
-
-unsafe impl NoUninit for bool {}
-
-unsafe impl NoUninit for NonZeroU8 {}
-unsafe impl NoUninit for NonZeroI8 {}
-unsafe impl NoUninit for NonZeroU16 {}
-unsafe impl NoUninit for NonZeroI16 {}
-unsafe impl NoUninit for NonZeroU32 {}
-unsafe impl NoUninit for NonZeroI32 {}
-unsafe impl NoUninit for NonZeroU64 {}
-unsafe impl NoUninit for NonZeroI64 {}
-unsafe impl NoUninit for NonZeroU128 {}
-unsafe impl NoUninit for NonZeroI128 {}
-unsafe impl NoUninit for NonZeroUsize {}
-unsafe impl NoUninit for NonZeroIsize {}