[][src]Trait shared_memory::SharedMemCast

pub unsafe trait SharedMemCast { }

Trait used to indicate that a type can be cast over the shared memory.

Read WARNING before implementing this manually on your own types.

For now, shared_memory implements the trait on almost all primitive types.

Deriving Automatically

You can avoid checking your structs/enums manually by using #[derive(SharedMemCast)]. This will automatically check that all fields of your type implement the SharedMemCast trait. That means that you can safely use your type as long as your program compiles.

use shared_memory::SharedMemCast;

#[derive(SharedMemCast)]
struct SomeState {
    num_listenners: u32,
    message: [u8; 256],
}

If you tried to use Vec<i32> or some other type that isn't safe to cast, you would get a compiler error.

WARNING

Only implement this trait if you understand the implications of mapping Rust types to shared memory. When doing so, you should be mindful of :

  • Does my type have any pointers in its internal representation ?
    • This is important because pointers in your type need to also point to the shared memory for it to be usable by other processes
  • Can my type resize its contents ?
    • If so, the type probably cannot be safely used over shared memory because your type might call alloc/realloc/free on shared memory addresses
  • Does my type allow for initialisation after instantiation ?
    • A [R|W]lock to the shared memory returns a reference to your type. That means that any use of that reference assumes that the type was properly initialized.

An example of a type that shouldn't be cast to the shared memory would be Vec. Vec internaly contains a pointer to a slice containing its data and some other metadata. This means that to cast a Vec to the shared memory, the memory has to already be initialized with valid pointers and metadata. Granted we could initialize those fields manually, the use of the vector might then trigger a free/realloc on our shared memory.

Implementations on Foreign Types

impl SharedMemCast for bool[src]

impl SharedMemCast for char[src]

impl SharedMemCast for str[src]

impl SharedMemCast for i8[src]

impl SharedMemCast for i16[src]

impl SharedMemCast for i32[src]

impl SharedMemCast for u8[src]

impl SharedMemCast for i64[src]

impl SharedMemCast for u16[src]

impl SharedMemCast for u64[src]

impl SharedMemCast for isize[src]

impl SharedMemCast for u32[src]

impl SharedMemCast for usize[src]

impl SharedMemCast for f32[src]

impl SharedMemCast for f64[src]

impl SharedMemCast for AtomicBool[src]

impl SharedMemCast for AtomicIsize[src]

impl<T> SharedMemCast for AtomicPtr<T>[src]

impl SharedMemCast for AtomicUsize[src]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

impl<T: SharedMemCast> SharedMemCast for [T; 8192][src]

impl<T: SharedMemCast> SharedMemCast for [T; 16384][src]

impl<T: SharedMemCast> SharedMemCast for [T; 32768][src]

impl<T: SharedMemCast> SharedMemCast for [T; 65536][src]

impl<T: SharedMemCast> SharedMemCast for [T; 131072][src]

impl<T: SharedMemCast> SharedMemCast for [T; 262144][src]

impl<T: SharedMemCast> SharedMemCast for [T; 524288][src]

impl<T: SharedMemCast> SharedMemCast for [T; 1048576][src]

impl<T: SharedMemCast> SharedMemCast for [T; 2097152][src]

impl<T: SharedMemCast> SharedMemCast for [T; 4194304][src]

impl<T: SharedMemCast> SharedMemCast for [T; 8388608][src]

impl<T: SharedMemCast> SharedMemCast for [T; 16777216][src]

impl<T: SharedMemCast> SharedMemCast for [T; 33554432][src]

impl<T: SharedMemCast> SharedMemCast for [T; 67108864][src]

impl<T: SharedMemCast> SharedMemCast for [T; 134217728][src]

impl<T: SharedMemCast> SharedMemCast for [T; 268435456][src]

impl<T: SharedMemCast> SharedMemCast for [T; 536870912][src]

impl<T: SharedMemCast> SharedMemCast for [T; 1073741824][src]

impl<T: SharedMemCast> SharedMemCast for [T; 2147483648][src]

Loading content...

Implementors

Loading content...