[−][src]Trait crndm::clone::PClone
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
derive
d 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
Loading content...Provided methods
pub 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.
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]
pub fn pclone(&self, journal: &Journal<A>) -> Self
[src]
pub fn pclone_from(&mut self, source: &Self, journal: &Journal<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]
pub 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 crndm::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 LogRefCell<T, A>
[src]
pub fn pclone(&self, j: &Journal<A>) -> LogRefCell<T, A>
[src]
impl<T: PSafe + Logger<A> + Copy, A: MemPool> PClone<A> for LogCell<T, A>
[src]
impl<T: PSafe + ?Sized, A: MemPool> PClone<A> for Prc<T, A>
[src]
pub 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));