[−][src]Trait evmap::shallow_copy::ShallowCopy
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
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
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
.
Implementations on Foreign Types
impl<T> ShallowCopy for Arc<T> where
T: ?Sized,
[src]
T: ?Sized,
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl<T> ShallowCopy for Rc<T> where
T: ?Sized,
[src]
T: ?Sized,
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl<T> ShallowCopy for Box<T> where
T: ?Sized,
[src]
T: ?Sized,
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl<T> ShallowCopy for Option<T> where
T: ShallowCopy,
[src]
T: ShallowCopy,
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl ShallowCopy for String
[src]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl<T> ShallowCopy for Vec<T>
[src]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl<'a, T> ShallowCopy for &'a T where
T: ?Sized,
[src]
T: ?Sized,
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl ShallowCopy for ()
[src]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl ShallowCopy for bool
[src]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl ShallowCopy for char
[src]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl ShallowCopy for usize
[src]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl ShallowCopy for u8
[src]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl ShallowCopy for u16
[src]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl ShallowCopy for u32
[src]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl ShallowCopy for u64
[src]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl ShallowCopy for u128
[src]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl ShallowCopy for isize
[src]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl ShallowCopy for i8
[src]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl ShallowCopy for i16
[src]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl ShallowCopy for i32
[src]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl ShallowCopy for i64
[src]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl ShallowCopy for i128
[src]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl ShallowCopy for f32
[src]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl ShallowCopy for f64
[src]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl<A: ShallowCopy> ShallowCopy for (A,)
[src]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl<A: ShallowCopy, B: ShallowCopy> ShallowCopy for (A, B)
[src]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl<A: ShallowCopy, B: ShallowCopy, C: ShallowCopy> ShallowCopy for (A, B, C)
[src]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl<A: ShallowCopy, B: ShallowCopy, C: ShallowCopy, D: ShallowCopy> ShallowCopy for (A, B, C, D)
[src]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl<A: ShallowCopy, B: ShallowCopy, C: ShallowCopy, D: ShallowCopy, E: ShallowCopy> ShallowCopy for (A, B, C, D, E)
[src]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
impl<A: ShallowCopy, B: ShallowCopy, C: ShallowCopy, D: ShallowCopy, E: ShallowCopy, F: ShallowCopy> ShallowCopy for (A, B, C, D, E, F)
[src]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[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]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[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]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[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]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[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]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[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]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[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]
unsafe fn shallow_copy(&self) -> ManuallyDrop<Self>
[src]
Implementors
impl<T> ShallowCopy for CopyValue<T> where
T: Copy,
[src]
T: Copy,