Trait corundum::clone::PClone[][src]

pub trait PClone<A: MemPool>: Sized {
    fn pclone(&self, journal: &Journal<A>) -> Self;

    fn pclone_from(&mut self, source: &Self, journal: &Journal<A>) { ... }
}

A common trait for the ability to explicitly duplicate an object.

Differs from Copy in that Copy is implicit and extremely inexpensive, while PClone is always explicit and may or may not be expensive. Its difference with Clone is that it a &Journal to be used for logging in Prc and Parc. In order to enforce these characteristics, Rust does not allow you to reimplement Copy, but you may reimplement Clone and PClone and run arbitrary code.

Since PClone is more general than Copy, you can automatically make anything Copy be Clone as well.

Derivable

This trait can be used with #[derive] if all fields are PClone. The derived implementation of PClone calls pclone on each field. It uses default::BuddyAlloc by default. It is possible to change the pool type(s) by using pools() attribute.

For a generic struct, #[derive] implements PClone conditionally by adding bound Clone on generic parameters.

// `derive` implements PClone<BuddyAlloc> for Reading<T> when T is 
// PClone<BuddyAlloc>
#[derive(PClone)]
struct Reading<T> {
    frequency: T,
}
// `derive` implements PClone<P> and PClone<Q> for Reading<T> when T is 
// PClone<P> and PClone<Q> specified by `pools`.
#[derive(PClone)]
#[pools(P,Q)]
struct Reading<T> {
    frequency: T,
}

How can I implement PClone?

Types that are Copy should have a trivial implementation of PClone. More formally: if T: Copy, x: T, and y: &T, then let x = y.pclone(); is equivalent to let x = *y;. Manual implementations should be careful to uphold this invariant; however, unsafe code must not rely on it to ensure memory safety. Note that, the implementation should be done for a specific (or generic) pool type.

Required methods

fn pclone(&self, journal: &Journal<A>) -> Self[src]

Loading content...

Provided methods

fn pclone_from(&mut self, source: &Self, journal: &Journal<A>)[src]

Performs copy-assignment from source.

a.clone_from(&b) is equivalent to a = b.clone() in functionality, but can be overridden to reuse the resources of a to avoid unnecessary allocations.

Loading content...

Implementations on Foreign Types

impl<T: PSafe + PClone<A>, A: MemPool> PClone<A> for Option<T>[src]

impl<T: PSafe + PClone<A> + ?Sized, A: MemPool> PClone<A> for &[T][src]

impl<T: PSafe + PClone<A>, A: MemPool, const N: usize> PClone<A> for [T; N][src]

impl<A: MemPool> PClone<A> for ()[src]

impl<A: MemPool, TupleElement0: PClone<A>> PClone<A> for (TupleElement0,)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>> PClone<A> for (TupleElement0, TupleElement1)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>, TupleElement4: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>, TupleElement4: PClone<A>, TupleElement5: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>, TupleElement4: PClone<A>, TupleElement5: PClone<A>, TupleElement6: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>, TupleElement4: PClone<A>, TupleElement5: PClone<A>, TupleElement6: PClone<A>, TupleElement7: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>, TupleElement4: PClone<A>, TupleElement5: PClone<A>, TupleElement6: PClone<A>, TupleElement7: PClone<A>, TupleElement8: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>, TupleElement4: PClone<A>, TupleElement5: PClone<A>, TupleElement6: PClone<A>, TupleElement7: PClone<A>, TupleElement8: PClone<A>, TupleElement9: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>, TupleElement4: PClone<A>, TupleElement5: PClone<A>, TupleElement6: PClone<A>, TupleElement7: PClone<A>, TupleElement8: PClone<A>, TupleElement9: PClone<A>, TupleElement10: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>, TupleElement4: PClone<A>, TupleElement5: PClone<A>, TupleElement6: PClone<A>, TupleElement7: PClone<A>, TupleElement8: PClone<A>, TupleElement9: PClone<A>, TupleElement10: PClone<A>, TupleElement11: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>, TupleElement4: PClone<A>, TupleElement5: PClone<A>, TupleElement6: PClone<A>, TupleElement7: PClone<A>, TupleElement8: PClone<A>, TupleElement9: PClone<A>, TupleElement10: PClone<A>, TupleElement11: PClone<A>, TupleElement12: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>, TupleElement4: PClone<A>, TupleElement5: PClone<A>, TupleElement6: PClone<A>, TupleElement7: PClone<A>, TupleElement8: PClone<A>, TupleElement9: PClone<A>, TupleElement10: PClone<A>, TupleElement11: PClone<A>, TupleElement12: PClone<A>, TupleElement13: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>, TupleElement4: PClone<A>, TupleElement5: PClone<A>, TupleElement6: PClone<A>, TupleElement7: PClone<A>, TupleElement8: PClone<A>, TupleElement9: PClone<A>, TupleElement10: PClone<A>, TupleElement11: PClone<A>, TupleElement12: PClone<A>, TupleElement13: PClone<A>, TupleElement14: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>, TupleElement4: PClone<A>, TupleElement5: PClone<A>, TupleElement6: PClone<A>, TupleElement7: PClone<A>, TupleElement8: PClone<A>, TupleElement9: PClone<A>, TupleElement10: PClone<A>, TupleElement11: PClone<A>, TupleElement12: PClone<A>, TupleElement13: PClone<A>, TupleElement14: PClone<A>, TupleElement15: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>, TupleElement4: PClone<A>, TupleElement5: PClone<A>, TupleElement6: PClone<A>, TupleElement7: PClone<A>, TupleElement8: PClone<A>, TupleElement9: PClone<A>, TupleElement10: PClone<A>, TupleElement11: PClone<A>, TupleElement12: PClone<A>, TupleElement13: PClone<A>, TupleElement14: PClone<A>, TupleElement15: PClone<A>, TupleElement16: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>, TupleElement4: PClone<A>, TupleElement5: PClone<A>, TupleElement6: PClone<A>, TupleElement7: PClone<A>, TupleElement8: PClone<A>, TupleElement9: PClone<A>, TupleElement10: PClone<A>, TupleElement11: PClone<A>, TupleElement12: PClone<A>, TupleElement13: PClone<A>, TupleElement14: PClone<A>, TupleElement15: PClone<A>, TupleElement16: PClone<A>, TupleElement17: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>, TupleElement4: PClone<A>, TupleElement5: PClone<A>, TupleElement6: PClone<A>, TupleElement7: PClone<A>, TupleElement8: PClone<A>, TupleElement9: PClone<A>, TupleElement10: PClone<A>, TupleElement11: PClone<A>, TupleElement12: PClone<A>, TupleElement13: PClone<A>, TupleElement14: PClone<A>, TupleElement15: PClone<A>, TupleElement16: PClone<A>, TupleElement17: PClone<A>, TupleElement18: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>, TupleElement4: PClone<A>, TupleElement5: PClone<A>, TupleElement6: PClone<A>, TupleElement7: PClone<A>, TupleElement8: PClone<A>, TupleElement9: PClone<A>, TupleElement10: PClone<A>, TupleElement11: PClone<A>, TupleElement12: PClone<A>, TupleElement13: PClone<A>, TupleElement14: PClone<A>, TupleElement15: PClone<A>, TupleElement16: PClone<A>, TupleElement17: PClone<A>, TupleElement18: PClone<A>, TupleElement19: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>, TupleElement4: PClone<A>, TupleElement5: PClone<A>, TupleElement6: PClone<A>, TupleElement7: PClone<A>, TupleElement8: PClone<A>, TupleElement9: PClone<A>, TupleElement10: PClone<A>, TupleElement11: PClone<A>, TupleElement12: PClone<A>, TupleElement13: PClone<A>, TupleElement14: PClone<A>, TupleElement15: PClone<A>, TupleElement16: PClone<A>, TupleElement17: PClone<A>, TupleElement18: PClone<A>, TupleElement19: PClone<A>, TupleElement20: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>, TupleElement4: PClone<A>, TupleElement5: PClone<A>, TupleElement6: PClone<A>, TupleElement7: PClone<A>, TupleElement8: PClone<A>, TupleElement9: PClone<A>, TupleElement10: PClone<A>, TupleElement11: PClone<A>, TupleElement12: PClone<A>, TupleElement13: PClone<A>, TupleElement14: PClone<A>, TupleElement15: PClone<A>, TupleElement16: PClone<A>, TupleElement17: PClone<A>, TupleElement18: PClone<A>, TupleElement19: PClone<A>, TupleElement20: PClone<A>, TupleElement21: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>, TupleElement4: PClone<A>, TupleElement5: PClone<A>, TupleElement6: PClone<A>, TupleElement7: PClone<A>, TupleElement8: PClone<A>, TupleElement9: PClone<A>, TupleElement10: PClone<A>, TupleElement11: PClone<A>, TupleElement12: PClone<A>, TupleElement13: PClone<A>, TupleElement14: PClone<A>, TupleElement15: PClone<A>, TupleElement16: PClone<A>, TupleElement17: PClone<A>, TupleElement18: PClone<A>, TupleElement19: PClone<A>, TupleElement20: PClone<A>, TupleElement21: PClone<A>, TupleElement22: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21, TupleElement22)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>, TupleElement4: PClone<A>, TupleElement5: PClone<A>, TupleElement6: PClone<A>, TupleElement7: PClone<A>, TupleElement8: PClone<A>, TupleElement9: PClone<A>, TupleElement10: PClone<A>, TupleElement11: PClone<A>, TupleElement12: PClone<A>, TupleElement13: PClone<A>, TupleElement14: PClone<A>, TupleElement15: PClone<A>, TupleElement16: PClone<A>, TupleElement17: PClone<A>, TupleElement18: PClone<A>, TupleElement19: PClone<A>, TupleElement20: PClone<A>, TupleElement21: PClone<A>, TupleElement22: PClone<A>, TupleElement23: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21, TupleElement22, TupleElement23)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>, TupleElement4: PClone<A>, TupleElement5: PClone<A>, TupleElement6: PClone<A>, TupleElement7: PClone<A>, TupleElement8: PClone<A>, TupleElement9: PClone<A>, TupleElement10: PClone<A>, TupleElement11: PClone<A>, TupleElement12: PClone<A>, TupleElement13: PClone<A>, TupleElement14: PClone<A>, TupleElement15: PClone<A>, TupleElement16: PClone<A>, TupleElement17: PClone<A>, TupleElement18: PClone<A>, TupleElement19: PClone<A>, TupleElement20: PClone<A>, TupleElement21: PClone<A>, TupleElement22: PClone<A>, TupleElement23: PClone<A>, TupleElement24: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21, TupleElement22, TupleElement23, TupleElement24)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>, TupleElement4: PClone<A>, TupleElement5: PClone<A>, TupleElement6: PClone<A>, TupleElement7: PClone<A>, TupleElement8: PClone<A>, TupleElement9: PClone<A>, TupleElement10: PClone<A>, TupleElement11: PClone<A>, TupleElement12: PClone<A>, TupleElement13: PClone<A>, TupleElement14: PClone<A>, TupleElement15: PClone<A>, TupleElement16: PClone<A>, TupleElement17: PClone<A>, TupleElement18: PClone<A>, TupleElement19: PClone<A>, TupleElement20: PClone<A>, TupleElement21: PClone<A>, TupleElement22: PClone<A>, TupleElement23: PClone<A>, TupleElement24: PClone<A>, TupleElement25: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21, TupleElement22, TupleElement23, TupleElement24, TupleElement25)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>, TupleElement4: PClone<A>, TupleElement5: PClone<A>, TupleElement6: PClone<A>, TupleElement7: PClone<A>, TupleElement8: PClone<A>, TupleElement9: PClone<A>, TupleElement10: PClone<A>, TupleElement11: PClone<A>, TupleElement12: PClone<A>, TupleElement13: PClone<A>, TupleElement14: PClone<A>, TupleElement15: PClone<A>, TupleElement16: PClone<A>, TupleElement17: PClone<A>, TupleElement18: PClone<A>, TupleElement19: PClone<A>, TupleElement20: PClone<A>, TupleElement21: PClone<A>, TupleElement22: PClone<A>, TupleElement23: PClone<A>, TupleElement24: PClone<A>, TupleElement25: PClone<A>, TupleElement26: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21, TupleElement22, TupleElement23, TupleElement24, TupleElement25, TupleElement26)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>, TupleElement4: PClone<A>, TupleElement5: PClone<A>, TupleElement6: PClone<A>, TupleElement7: PClone<A>, TupleElement8: PClone<A>, TupleElement9: PClone<A>, TupleElement10: PClone<A>, TupleElement11: PClone<A>, TupleElement12: PClone<A>, TupleElement13: PClone<A>, TupleElement14: PClone<A>, TupleElement15: PClone<A>, TupleElement16: PClone<A>, TupleElement17: PClone<A>, TupleElement18: PClone<A>, TupleElement19: PClone<A>, TupleElement20: PClone<A>, TupleElement21: PClone<A>, TupleElement22: PClone<A>, TupleElement23: PClone<A>, TupleElement24: PClone<A>, TupleElement25: PClone<A>, TupleElement26: PClone<A>, TupleElement27: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21, TupleElement22, TupleElement23, TupleElement24, TupleElement25, TupleElement26, TupleElement27)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>, TupleElement4: PClone<A>, TupleElement5: PClone<A>, TupleElement6: PClone<A>, TupleElement7: PClone<A>, TupleElement8: PClone<A>, TupleElement9: PClone<A>, TupleElement10: PClone<A>, TupleElement11: PClone<A>, TupleElement12: PClone<A>, TupleElement13: PClone<A>, TupleElement14: PClone<A>, TupleElement15: PClone<A>, TupleElement16: PClone<A>, TupleElement17: PClone<A>, TupleElement18: PClone<A>, TupleElement19: PClone<A>, TupleElement20: PClone<A>, TupleElement21: PClone<A>, TupleElement22: PClone<A>, TupleElement23: PClone<A>, TupleElement24: PClone<A>, TupleElement25: PClone<A>, TupleElement26: PClone<A>, TupleElement27: PClone<A>, TupleElement28: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21, TupleElement22, TupleElement23, TupleElement24, TupleElement25, TupleElement26, TupleElement27, TupleElement28)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>, TupleElement4: PClone<A>, TupleElement5: PClone<A>, TupleElement6: PClone<A>, TupleElement7: PClone<A>, TupleElement8: PClone<A>, TupleElement9: PClone<A>, TupleElement10: PClone<A>, TupleElement11: PClone<A>, TupleElement12: PClone<A>, TupleElement13: PClone<A>, TupleElement14: PClone<A>, TupleElement15: PClone<A>, TupleElement16: PClone<A>, TupleElement17: PClone<A>, TupleElement18: PClone<A>, TupleElement19: PClone<A>, TupleElement20: PClone<A>, TupleElement21: PClone<A>, TupleElement22: PClone<A>, TupleElement23: PClone<A>, TupleElement24: PClone<A>, TupleElement25: PClone<A>, TupleElement26: PClone<A>, TupleElement27: PClone<A>, TupleElement28: PClone<A>, TupleElement29: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21, TupleElement22, TupleElement23, TupleElement24, TupleElement25, TupleElement26, TupleElement27, TupleElement28, TupleElement29)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>, TupleElement4: PClone<A>, TupleElement5: PClone<A>, TupleElement6: PClone<A>, TupleElement7: PClone<A>, TupleElement8: PClone<A>, TupleElement9: PClone<A>, TupleElement10: PClone<A>, TupleElement11: PClone<A>, TupleElement12: PClone<A>, TupleElement13: PClone<A>, TupleElement14: PClone<A>, TupleElement15: PClone<A>, TupleElement16: PClone<A>, TupleElement17: PClone<A>, TupleElement18: PClone<A>, TupleElement19: PClone<A>, TupleElement20: PClone<A>, TupleElement21: PClone<A>, TupleElement22: PClone<A>, TupleElement23: PClone<A>, TupleElement24: PClone<A>, TupleElement25: PClone<A>, TupleElement26: PClone<A>, TupleElement27: PClone<A>, TupleElement28: PClone<A>, TupleElement29: PClone<A>, TupleElement30: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21, TupleElement22, TupleElement23, TupleElement24, TupleElement25, TupleElement26, TupleElement27, TupleElement28, TupleElement29, TupleElement30)[src]

impl<A: MemPool, TupleElement0: PClone<A>, TupleElement1: PClone<A>, TupleElement2: PClone<A>, TupleElement3: PClone<A>, TupleElement4: PClone<A>, TupleElement5: PClone<A>, TupleElement6: PClone<A>, TupleElement7: PClone<A>, TupleElement8: PClone<A>, TupleElement9: PClone<A>, TupleElement10: PClone<A>, TupleElement11: PClone<A>, TupleElement12: PClone<A>, TupleElement13: PClone<A>, TupleElement14: PClone<A>, TupleElement15: PClone<A>, TupleElement16: PClone<A>, TupleElement17: PClone<A>, TupleElement18: PClone<A>, TupleElement19: PClone<A>, TupleElement20: PClone<A>, TupleElement21: PClone<A>, TupleElement22: PClone<A>, TupleElement23: PClone<A>, TupleElement24: PClone<A>, TupleElement25: PClone<A>, TupleElement26: PClone<A>, TupleElement27: PClone<A>, TupleElement28: PClone<A>, TupleElement29: PClone<A>, TupleElement30: PClone<A>, TupleElement31: PClone<A>> PClone<A> for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11, TupleElement12, TupleElement13, TupleElement14, TupleElement15, TupleElement16, TupleElement17, TupleElement18, TupleElement19, TupleElement20, TupleElement21, TupleElement22, TupleElement23, TupleElement24, TupleElement25, TupleElement26, TupleElement27, TupleElement28, TupleElement29, TupleElement30, TupleElement31)[src]

impl<A: MemPool> PClone<A> for usize[src]

impl<A: MemPool> PClone<A> for u8[src]

impl<A: MemPool> PClone<A> for u16[src]

impl<A: MemPool> PClone<A> for u32[src]

impl<A: MemPool> PClone<A> for u64[src]

impl<A: MemPool> PClone<A> for u128[src]

impl<A: MemPool> PClone<A> for isize[src]

impl<A: MemPool> PClone<A> for i8[src]

impl<A: MemPool> PClone<A> for i16[src]

impl<A: MemPool> PClone<A> for i32[src]

impl<A: MemPool> PClone<A> for i64[src]

impl<A: MemPool> PClone<A> for i128[src]

impl<A: MemPool> PClone<A> for f32[src]

impl<A: MemPool> PClone<A> for f64[src]

impl<A: MemPool> PClone<A> for bool[src]

impl<A: MemPool> PClone<A> for char[src]

Loading content...

Implementors

impl<A: MemPool> PClone<A> for String<A>[src]

impl<A: MemPool, T: PSafe + PClone<A>> PClone<A> for Vec<T, A>[src]

impl<T: PSafe + PClone<A> + ?Sized, A: MemPool> PClone<A> for Pbox<T, A>[src]

default fn pclone(&self, journal: &Journal<A>) -> Pbox<T, A>[src]

Returns a new box with a pclone() of this box’s contents.

Examples

use corundum::clone::PClone;

Heap::transaction(|j| {
    let x = Pbox::new(5, j);
    let y = x.pclone(j);
     
    // The value is the same
    assert_eq!(x, y);
     
    // But they are unique objects
    assert_ne!(&*x as *const i32, &*y as *const i32);
}).unwrap();

impl<T: PSafe + PClone<A>, A: MemPool> PClone<A> for PRefCell<T, A>[src]

impl<T: PSafe + Logger<A> + Copy, A: MemPool> PClone<A> for PCell<T, A>[src]

impl<T: PSafe + ?Sized, A: MemPool> PClone<A> for Prc<T, A>[src]

fn pclone(&self, journal: &Journal<A>) -> Prc<T, A>[src]

Creates a new strong reference to the object

It increments the strong reference counter in a failure-atomic manner. When a transaction is aborted or power fails, every strong references to the object should be gone, and the counters should rollback to the consistent state before the transaction.

Examples

let root = P::open::<Prc<i32>>("foo.pool", O_CF).unwrap();
 
let _ = P::transaction(|j| {
    let _n1 = root.pclone(j);
    let _n2 = root.pclone(j);
    let _n3 = root.pclone(j);
    assert_eq!(4, Prc::strong_count(&root));
    panic!("abort")
});
 
assert_eq!(1, Prc::strong_count(&root));

impl<T: PSafe + ?Sized, A: MemPool> PClone<A> for corundum::prc::Weak<T, A>[src]

impl<T: PSafe + ?Sized, A: MemPool> PClone<A> for Parc<T, A>[src]

impl<T: PSafe + ?Sized, A: MemPool> PClone<A> for corundum::sync::Weak<T, A>[src]

Loading content...