[][src]Trait dataview::Pod

pub unsafe trait Pod: 'static {
    fn zeroed() -> Self
    where
        Self: Sized
, { ... }
fn as_bytes(&self) -> &[u8] { ... }
fn as_bytes_mut(&mut self) -> &mut [u8] { ... }
fn as_data_view(&self) -> &DataView { ... }
fn as_data_view_mut(&mut self) -> &mut DataView { ... } }

Defines types which can be safely transmuted from any bit pattern.

Examples

use dataview::Pod;

#[derive(Pod)]
#[repr(C)]
struct MyType {
	field: i32,
}

// Construct a zero initialized instance.
let mut inst = MyType::zeroed();
assert_eq!(inst.field, 0);

// Use the DataView interface to access the instance.
inst.as_data_view_mut().write(2, &255_u8);

// Returns a byte view over the instance.
assert_eq!(inst.as_bytes(), &[0, 0, 255, 0]);

Safety

It must be safe to transmute between any bit pattern (with length equal to the size of the type) and Self.

This is true for these primitive types: i8, i16, i32, i64, i128, u8, u16, u32, u64, u128, f32, f64 and the raw pointer types. Primitives such as str and bool are not pod because not every valid bit pattern is a valid instance of these types. Reference types are never pod.

Arrays and slices of pod types are also pod themselves.

Due to limitations of stable Rust only specific array sizes implement the Pod trait. Enable the nightly feature on a nightly compiler to use const generics to implement the Pod trait for all array types.

When Pod is implemented for a user defined struct it must meet the following requirements:

  • Be annotated with repr(C) or repr(transparent).

  • Have every field's type implement Pod itself.

  • Not have any padding between its fields.

Auto derive

To help with safely implementing this trait for structs, a proc-macro is provided to implement the Pod trait if the requirements are satisfied.

Provided methods

fn zeroed() -> Self where
    Self: Sized

Returns a zero-initialized instance of the type.

fn as_bytes(&self) -> &[u8]

Returns the object's memory as a byte slice.

fn as_bytes_mut(&mut self) -> &mut [u8]

Returns the object's memory as a mutable byte slice.

fn as_data_view(&self) -> &DataView

Returns a data view into the object's memory.

fn as_data_view_mut(&mut self) -> &mut DataView

Returns a mutable data view into the object's memory.

Loading content...

Implementations on Foreign Types

impl<T: 'static> Pod for PhantomData<T>[src]

Loading content...

Implementors

impl Pod for f32[src]

impl Pod for f64[src]

impl Pod for i8[src]

impl Pod for i16[src]

impl Pod for i32[src]

impl Pod for i64[src]

impl Pod for i128[src]

impl Pod for isize[src]

impl Pod for u8[src]

impl Pod for u16[src]

impl Pod for u32[src]

impl Pod for u64[src]

impl Pod for u128[src]

impl Pod for usize[src]

impl<T: 'static> Pod for *const T[src]

impl<T: 'static> Pod for *mut T[src]

impl<T: Pod> Pod for [T; 0][src]

impl<T: Pod> Pod for [T; 1][src]

impl<T: Pod> Pod for [T; 2][src]

impl<T: Pod> Pod for [T; 3][src]

impl<T: Pod> Pod for [T; 4][src]

impl<T: Pod> Pod for [T; 5][src]

impl<T: Pod> Pod for [T; 6][src]

impl<T: Pod> Pod for [T; 7][src]

impl<T: Pod> Pod for [T; 8][src]

impl<T: Pod> Pod for [T; 9][src]

impl<T: Pod> Pod for [T; 10][src]

impl<T: Pod> Pod for [T; 11][src]

impl<T: Pod> Pod for [T; 12][src]

impl<T: Pod> Pod for [T; 13][src]

impl<T: Pod> Pod for [T; 14][src]

impl<T: Pod> Pod for [T; 15][src]

impl<T: Pod> Pod for [T; 16][src]

impl<T: Pod> Pod for [T; 17][src]

impl<T: Pod> Pod for [T; 18][src]

impl<T: Pod> Pod for [T; 19][src]

impl<T: Pod> Pod for [T; 20][src]

impl<T: Pod> Pod for [T; 21][src]

impl<T: Pod> Pod for [T; 22][src]

impl<T: Pod> Pod for [T; 23][src]

impl<T: Pod> Pod for [T; 24][src]

impl<T: Pod> Pod for [T; 25][src]

impl<T: Pod> Pod for [T; 26][src]

impl<T: Pod> Pod for [T; 27][src]

impl<T: Pod> Pod for [T; 28][src]

impl<T: Pod> Pod for [T; 29][src]

impl<T: Pod> Pod for [T; 30][src]

impl<T: Pod> Pod for [T; 31][src]

impl<T: Pod> Pod for [T; 32][src]

impl<T: Pod> Pod for [T; 33][src]

impl<T: Pod> Pod for [T; 34][src]

impl<T: Pod> Pod for [T; 35][src]

impl<T: Pod> Pod for [T; 36][src]

impl<T: Pod> Pod for [T; 37][src]

impl<T: Pod> Pod for [T; 38][src]

impl<T: Pod> Pod for [T; 39][src]

impl<T: Pod> Pod for [T; 40][src]

impl<T: Pod> Pod for [T; 41][src]

impl<T: Pod> Pod for [T; 42][src]

impl<T: Pod> Pod for [T; 43][src]

impl<T: Pod> Pod for [T; 44][src]

impl<T: Pod> Pod for [T; 45][src]

impl<T: Pod> Pod for [T; 46][src]

impl<T: Pod> Pod for [T; 47][src]

impl<T: Pod> Pod for [T; 48][src]

impl<T: Pod> Pod for [T; 49][src]

impl<T: Pod> Pod for [T; 50][src]

impl<T: Pod> Pod for [T; 51][src]

impl<T: Pod> Pod for [T; 52][src]

impl<T: Pod> Pod for [T; 53][src]

impl<T: Pod> Pod for [T; 54][src]

impl<T: Pod> Pod for [T; 55][src]

impl<T: Pod> Pod for [T; 56][src]

impl<T: Pod> Pod for [T; 57][src]

impl<T: Pod> Pod for [T; 58][src]

impl<T: Pod> Pod for [T; 59][src]

impl<T: Pod> Pod for [T; 60][src]

impl<T: Pod> Pod for [T; 61][src]

impl<T: Pod> Pod for [T; 62][src]

impl<T: Pod> Pod for [T; 63][src]

impl<T: Pod> Pod for [T; 64][src]

impl<T: Pod> Pod for [T; 80][src]

impl<T: Pod> Pod for [T; 100][src]

impl<T: Pod> Pod for [T; 128][src]

impl<T: Pod> Pod for [T; 160][src]

impl<T: Pod> Pod for [T; 192][src]

impl<T: Pod> Pod for [T; 256][src]

impl<T: Pod> Pod for [T; 512][src]

impl<T: Pod> Pod for [T; 768][src]

impl<T: Pod> Pod for [T; 1024][src]

impl<T: Pod> Pod for [T; 2048][src]

impl<T: Pod> Pod for [T; 4096][src]

impl<T: Pod> Pod for [T][src]

Loading content...