Trait corundum::PSafe [−][src]
pub unsafe auto trait PSafe { }
Expand description
It marks the implementing type to be free of pointers to the volatile heap, and persistence safe.
Also, every type that allows interior mutability is not safe in persistence terms, because there might be no log of the value. Atomic types are persistence safe, even though they provide interior mutability.
Limitation
Function pointers are not completely prevented. Due to Rust’s limitation on declaring generic pointers to functions without exact number of arguments, we manually limit all pointers to functions with up to 32 arguments. Function pointers with a number of arguments beyond 32 are inevitably allowed.
Implementations on Foreign Types
impl<A1, A2, A3, A4, A5, A6, A7, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4, _: A5, _: A6, _: A7) -> R
[src]impl<A1, A2, A3, A4, A5, A6, A7, A8, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4, _: A5, _: A6, _: A7, _: A8) -> R
[src]impl<A1, A2, A3, A4, A5, A6, A7, A8, A9, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4, _: A5, _: A6, _: A7, _: A8, _: A9) -> R
[src]impl<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4, _: A5, _: A6, _: A7, _: A8, _: A9, _: A10) -> R
[src]impl<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4, _: A5, _: A6, _: A7, _: A8, _: A9, _: A10, _: A11) -> R
[src]impl<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4, _: A5, _: A6, _: A7, _: A8, _: A9, _: A10, _: A11, _: A12) -> R
[src]impl<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4, _: A5, _: A6, _: A7, _: A8, _: A9, _: A10, _: A11, _: A12, _: A13) -> R
[src]impl<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4, _: A5, _: A6, _: A7, _: A8, _: A9, _: A10, _: A11, _: A12, _: A13, _: A14) -> R
[src]impl<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4, _: A5, _: A6, _: A7, _: A8, _: A9, _: A10, _: A11, _: A12, _: A13, _: A14, _: A15) -> R
[src]impl<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4, _: A5, _: A6, _: A7, _: A8, _: A9, _: A10, _: A11, _: A12, _: A13, _: A14, _: A15, _: A16) -> R
[src]impl<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4, _: A5, _: A6, _: A7, _: A8, _: A9, _: A10, _: A11, _: A12, _: A13, _: A14, _: A15, _: A16, _: A17) -> R
[src]impl<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4, _: A5, _: A6, _: A7, _: A8, _: A9, _: A10, _: A11, _: A12, _: A13, _: A14, _: A15, _: A16, _: A17, _: A18) -> R
[src]impl<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4, _: A5, _: A6, _: A7, _: A8, _: A9, _: A10, _: A11, _: A12, _: A13, _: A14, _: A15, _: A16, _: A17, _: A18, _: A19) -> R
[src]impl<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4, _: A5, _: A6, _: A7, _: A8, _: A9, _: A10, _: A11, _: A12, _: A13, _: A14, _: A15, _: A16, _: A17, _: A18, _: A19, _: A20) -> R
[src]impl<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4, _: A5, _: A6, _: A7, _: A8, _: A9, _: A10, _: A11, _: A12, _: A13, _: A14, _: A15, _: A16, _: A17, _: A18, _: A19, _: A20, _: A21) -> R
[src]impl<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4, _: A5, _: A6, _: A7, _: A8, _: A9, _: A10, _: A11, _: A12, _: A13, _: A14, _: A15, _: A16, _: A17, _: A18, _: A19, _: A20, _: A21, _: A22) -> R
[src]impl<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4, _: A5, _: A6, _: A7, _: A8, _: A9, _: A10, _: A11, _: A12, _: A13, _: A14, _: A15, _: A16, _: A17, _: A18, _: A19, _: A20, _: A21, _: A22, _: A23) -> R
[src]impl<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4, _: A5, _: A6, _: A7, _: A8, _: A9, _: A10, _: A11, _: A12, _: A13, _: A14, _: A15, _: A16, _: A17, _: A18, _: A19, _: A20, _: A21, _: A22, _: A23, _: A24) -> R
[src]impl<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4, _: A5, _: A6, _: A7, _: A8, _: A9, _: A10, _: A11, _: A12, _: A13, _: A14, _: A15, _: A16, _: A17, _: A18, _: A19, _: A20, _: A21, _: A22, _: A23, _: A24, _: A25) -> R
[src]impl<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4, _: A5, _: A6, _: A7, _: A8, _: A9, _: A10, _: A11, _: A12, _: A13, _: A14, _: A15, _: A16, _: A17, _: A18, _: A19, _: A20, _: A21, _: A22, _: A23, _: A24, _: A25, _: A26) -> R
[src]impl<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4, _: A5, _: A6, _: A7, _: A8, _: A9, _: A10, _: A11, _: A12, _: A13, _: A14, _: A15, _: A16, _: A17, _: A18, _: A19, _: A20, _: A21, _: A22, _: A23, _: A24, _: A25, _: A26, _: A27) -> R
[src]impl<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4, _: A5, _: A6, _: A7, _: A8, _: A9, _: A10, _: A11, _: A12, _: A13, _: A14, _: A15, _: A16, _: A17, _: A18, _: A19, _: A20, _: A21, _: A22, _: A23, _: A24, _: A25, _: A26, _: A27, _: A28) -> R
[src]impl<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4, _: A5, _: A6, _: A7, _: A8, _: A9, _: A10, _: A11, _: A12, _: A13, _: A14, _: A15, _: A16, _: A17, _: A18, _: A19, _: A20, _: A21, _: A22, _: A23, _: A24, _: A25, _: A26, _: A27, _: A28, _: A29) -> R
[src]impl<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4, _: A5, _: A6, _: A7, _: A8, _: A9, _: A10, _: A11, _: A12, _: A13, _: A14, _: A15, _: A16, _: A17, _: A18, _: A19, _: A20, _: A21, _: A22, _: A23, _: A24, _: A25, _: A26, _: A27, _: A28, _: A29, _: A30) -> R
[src]impl<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4, _: A5, _: A6, _: A7, _: A8, _: A9, _: A10, _: A11, _: A12, _: A13, _: A14, _: A15, _: A16, _: A17, _: A18, _: A19, _: A20, _: A21, _: A22, _: A23, _: A24, _: A25, _: A26, _: A27, _: A28, _: A29, _: A30, _: A31) -> R
[src]impl<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30, A31, A32, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4, _: A5, _: A6, _: A7, _: A8, _: A9, _: A10, _: A11, _: A12, _: A13, _: A14, _: A15, _: A16, _: A17, _: A18, _: A19, _: A20, _: A21, _: A22, _: A23, _: A24, _: A25, _: A26, _: A27, _: A28, _: A29, _: A30, _: A31, _: A32) -> R
[src]UnsafeCell
is marked as PSafe because it exposes interior mutability
without taking a log, which is unsafe from persistence perspective.
Implementors
The allocator does not need to implement PSafe
Safe to be stored in persistent memory
Auto implementors
impl PSafe for BuddyAlloc
impl<'a, T> !PSafe for IterHelper<'a, T>
impl<'a, T, A> !PSafe for MutexGuard<'a, T, A>
impl<A> PSafe for corundum::stm::pspd::Scratchpad<A>
impl<A> PSafe for corundum::stm::vspd::Scratchpad<A>
impl<T> !PSafe for IntoIteratorHelper<T>
impl<T> PSafe for AssertTxInSafe<T> where
T: PSafe,
impl<T, A> !PSafe for LogNonNull<T, A>