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