[][src]Trait evmap::shallow_copy::ShallowCopy

pub trait ShallowCopy {
    pub unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>;
}

Types that implement this trait can be cheaply copied by (potentially) aliasing the data they contain. Only the last shallow copy will be dropped -- all others will be silently leaked (with mem::forget).

To implement this trait for your own Copy type, write:

use std::mem::ManuallyDrop;

#[derive(Copy, Clone)]
struct T;

impl ShallowCopy for T {
    unsafe fn shallow_copy(&self) -> ManuallyDrop<Self> {
        ManuallyDrop::new(*self)
    }
}

If you have a non-Copy type, the value returned by shallow_copy should point to the same data as the &mut self, and it should be safe to mem::forget either of the copies as long as the other is dropped normally afterwards.

For complex, non-Copy types, you can place the type behind a wrapper that implements ShallowCopy such as Box or Arc. Alternatively, if your type is made up of types that all implement ShallowCopy, consider using the evmap-derive crate, which contains a derive macro for ShallowCopy. See that crate's documentation for details.

Required methods

pub unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>[src]

Perform an aliasing copy of this value.

Safety

The use of this method is only safe if the values involved are never mutated, and only one of the copies is dropped; the remaining copies must be forgotten with mem::forget.

Loading content...

Implementations on Foreign Types

impl<T> ShallowCopy for Arc<T> where
    T: ?Sized
[src]

impl<T> ShallowCopy for Rc<T> where
    T: ?Sized
[src]

impl<T> ShallowCopy for Box<T> where
    T: ?Sized
[src]

impl<T> ShallowCopy for Option<T> where
    T: ShallowCopy
[src]

impl ShallowCopy for String[src]

impl<T> ShallowCopy for Vec<T>[src]

impl<'a, T> ShallowCopy for &'a T where
    T: ?Sized
[src]

impl ShallowCopy for ()[src]

impl ShallowCopy for bool[src]

impl ShallowCopy for char[src]

impl ShallowCopy for usize[src]

impl ShallowCopy for u8[src]

impl ShallowCopy for u16[src]

impl ShallowCopy for u32[src]

impl ShallowCopy for u64[src]

impl ShallowCopy for u128[src]

impl ShallowCopy for isize[src]

impl ShallowCopy for i8[src]

impl ShallowCopy for i16[src]

impl ShallowCopy for i32[src]

impl ShallowCopy for i64[src]

impl ShallowCopy for i128[src]

impl ShallowCopy for f32[src]

impl ShallowCopy for f64[src]

impl<A: ShallowCopy> ShallowCopy for (A,)[src]

impl<A: ShallowCopy, B: ShallowCopy> ShallowCopy for (A, B)[src]

impl<A: ShallowCopy, B: ShallowCopy, C: ShallowCopy> ShallowCopy for (A, B, C)[src]

impl<A: ShallowCopy, B: ShallowCopy, C: ShallowCopy, D: ShallowCopy> ShallowCopy for (A, B, C, D)[src]

impl<A: ShallowCopy, B: ShallowCopy, C: ShallowCopy, D: ShallowCopy, E: ShallowCopy> ShallowCopy for (A, B, C, D, E)[src]

impl<A: ShallowCopy, B: ShallowCopy, C: ShallowCopy, D: ShallowCopy, E: ShallowCopy, F: ShallowCopy> ShallowCopy for (A, B, C, D, E, F)[src]

impl<A: ShallowCopy, B: ShallowCopy, C: ShallowCopy, D: ShallowCopy, E: ShallowCopy, F: ShallowCopy, G: ShallowCopy> ShallowCopy for (A, B, C, D, E, F, G)[src]

impl<A: ShallowCopy, B: ShallowCopy, C: ShallowCopy, D: ShallowCopy, E: ShallowCopy, F: ShallowCopy, G: ShallowCopy, H: ShallowCopy> ShallowCopy for (A, B, C, D, E, F, G, H)[src]

impl<A: ShallowCopy, B: ShallowCopy, C: ShallowCopy, D: ShallowCopy, E: ShallowCopy, F: ShallowCopy, G: ShallowCopy, H: ShallowCopy, I: ShallowCopy> ShallowCopy for (A, B, C, D, E, F, G, H, I)[src]

impl<A: ShallowCopy, B: ShallowCopy, C: ShallowCopy, D: ShallowCopy, E: ShallowCopy, F: ShallowCopy, G: ShallowCopy, H: ShallowCopy, I: ShallowCopy, J: ShallowCopy> ShallowCopy for (A, B, C, D, E, F, G, H, I, J)[src]

impl<A: ShallowCopy, B: ShallowCopy, C: ShallowCopy, D: ShallowCopy, E: ShallowCopy, F: ShallowCopy, G: ShallowCopy, H: ShallowCopy, I: ShallowCopy, J: ShallowCopy, K: ShallowCopy> ShallowCopy for (A, B, C, D, E, F, G, H, I, J, K)[src]

impl<A: ShallowCopy, B: ShallowCopy, C: ShallowCopy, D: ShallowCopy, E: ShallowCopy, F: ShallowCopy, G: ShallowCopy, H: ShallowCopy, I: ShallowCopy, J: ShallowCopy, K: ShallowCopy, L: ShallowCopy> ShallowCopy for (A, B, C, D, E, F, G, H, I, J, K, L)[src]

Loading content...

Implementors

impl<T> ShallowCopy for CopyValue<T> where
    T: Copy
[src]

Loading content...