Trait bevy::core::Pod

pub unsafe trait Pod: Zeroable + Copy + 'static { }
Expand description

Marker trait for “plain old data”.

The point of this trait is that once something is marked “plain old data” you can really go to town with the bit fiddling and bit casting. Therefore, it’s a relatively strong claim to make about a type. Do not add this to your type casually.

Reminder: The results of casting around bytes between data types are endian dependant. Little-endian machines are the most common, but big-endian machines do exist (and big-endian is also used for “network order” bytes).

Safety

  • The type must be inhabited (eg: no Infallible).
  • The type must allow any bit pattern (eg: no bool or char, which have illegal bit patterns).
  • 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).
  • The type needs to have all fields also be Pod.
  • The type needs 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.
  • 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.

Implementations on Foreign Types§

§

impl<T> Pod for [T; 18]where T: Pod,

§

impl<T> Pod for [T; 32]where T: Pod,

§

impl<T> Pod for [T; 1]where T: Pod,

§

impl Pod for usize

§

impl<T> Pod for [T; 1024]where T: Pod,

§

impl<T> Pod for [T; 13]where T: Pod,

§

impl<T> Pod for [T; 9]where T: Pod,

§

impl<T> Pod for [T; 29]where T: Pod,

§

impl<T> Pod for [T; 14]where T: Pod,

§

impl Pod for i8

§

impl<T> Pod for [T; 15]where T: Pod,

§

impl<T> Pod for [T; 26]where T: Pod,

§

impl<T> Pod for [T; 5]where T: Pod,

§

impl<T> Pod for [T; 4]where T: Pod,

§

impl Pod for i64

§

impl<T> Pod for [T; 7]where T: Pod,

§

impl<T> Pod for [T; 31]where T: Pod,

§

impl<T> Pod for [T; 8]where T: Pod,

§

impl Pod for __m256d

§

impl Pod for u32

§

impl Pod for __m128d

§

impl Pod for u128

§

impl<T> Pod for [T; 3]where T: Pod,

§

impl<T> Pod for [T; 25]where T: Pod,

§

impl<T> Pod for [T; 96]where T: Pod,

§

impl<T> Pod for [T; 2048]where T: Pod,

§

impl<T> Pod for [T; 20]where T: Pod,

§

impl<T> Pod for [T; 128]where T: Pod,

§

impl<T> Pod for [T; 16]where T: Pod,

§

impl<T> Pod for [T; 17]where T: Pod,

§

impl<T> Pod for [T; 21]where T: Pod,

§

impl<T> Pod for [T; 10]where T: Pod,

§

impl<T> Pod for [T; 28]where T: Pod,

§

impl Pod for __m128i

§

impl Pod for f64

§

impl Pod for u8

§

impl Pod for f32

§

impl Pod for __m256

§

impl<T> Pod for [T; 64]where T: Pod,

§

impl<T> Pod for [T; 256]where T: Pod,

§

impl<T> Pod for [T; 19]where T: Pod,

§

impl<T> Pod for [T; 48]where T: Pod,

§

impl Pod for i128

§

impl Pod for i16

§

impl<T> Pod for [T; 23]where T: Pod,

§

impl<T> Pod for [T; 6]where T: Pod,

§

impl Pod for __m128

§

impl<T> Pod for ManuallyDrop<T>where T: Pod,

§

impl Pod for i32

§

impl<T> Pod for [T; 512]where T: Pod,

§

impl<T> Pod for [T; 12]where T: Pod,

§

impl<T> Pod for PhantomData<T>where T: Pod,

§

impl<T> Pod for Wrapping<T>where T: Pod,

§

impl Pod for u16

§

impl<T> Pod for [T; 30]where T: Pod,

§

impl<T> Pod for [T; 0]where T: Pod,

§

impl Pod for __m256i

§

impl Pod for isize

§

impl<T> Pod for [T; 2]where T: Pod,

§

impl Pod for u64

§

impl Pod for ()

§

impl<T> Pod for [T; 4096]where T: Pod,

§

impl<T> Pod for [T; 11]where T: Pod,

§

impl<T> Pod for [T; 24]where T: Pod,

§

impl Pod for PhantomPinned

§

impl<T> Pod for [T; 27]where T: Pod,

§

impl<T> Pod for Option<T>where T: PodInOption,

§

impl<T> Pod for [T; 22]where T: Pod,

Implementors§