Trait corundum::PSafe[][src]

pub unsafe auto trait PSafe { }

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 PSafe for isize

impl<T> PSafe for [T] where
    T: PSafe

impl PSafe for [u8]

impl PSafe for char

impl PSafe for u128

impl PSafe for u16

impl PSafe for i128

impl PSafe for i16

impl PSafe for str

impl PSafe for f64

impl PSafe for u64

impl PSafe for u8

impl PSafe for i64

impl PSafe for i8

impl<T, const N: usize> PSafe for [T; N] where
    T: PSafe

impl PSafe for bool

impl PSafe for f32

impl PSafe for u32

impl PSafe for usize

impl PSafe for i32

impl<T: ?Sized> !PSafe for *const T[src]

impl<T: ?Sized> !PSafe for *mut T[src]

impl<T> !PSafe for &T[src]

impl<T> !PSafe for &mut T[src]

impl !PSafe for File[src]

impl<R> !PSafe for fn() -> R[src]

impl<A1, R> !PSafe for fn(_: A1) -> R[src]

impl<A1, A2, R> !PSafe for fn(_: A1, _: A2) -> R[src]

impl<A1, A2, A3, R> !PSafe for fn(_: A1, _: A2, _: A3) -> R[src]

impl<A1, A2, A3, A4, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4) -> R[src]

impl<A1, A2, A3, A4, A5, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4, _: A5) -> R[src]

impl<A1, A2, A3, A4, A5, A6, R> !PSafe for fn(_: A1, _: A2, _: A3, _: A4, _: A5, _: A6) -> R[src]

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]

impl<T: ?Sized> !PSafe for UnsafeCell<T>[src]

UnsafeCell is marked as PSafe because it exposes interior mutability without taking a log, which is unsafe from persistence perspective.

Loading content...

Implementors

impl<A: MemPool> !PSafe for Journal<A>[src]

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

The allocator does not need to implement PSafe

impl<A: MemPool, T: PSafe> PSafe for Ptr<[T], A>[src]

impl<T, A: MemPool> !PSafe for RootCell<'_, T, A>[src]

impl<T, A: MemPool> PSafe for PMutex<T, A>[src]

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

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

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

impl<T: PSafe, A: MemPool> PSafe for Slice<T, A>[src]

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

impl<T: Default + VSafe + ?Sized, A: MemPool> PSafe for TCell<T, A>[src]

Safe to be stored in persistent memory

impl<T: Default + VSafe + ?Sized, A: MemPool> PSafe for VCell<T, A>[src]

impl<T: ?Sized, A: MemPool> PSafe for PrcBox<T, A>[src]

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

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

Loading content...

Auto implementors

impl !PSafe for Chaperon

impl !PSafe for SpinLock

impl PSafe for LogEnum

impl PSafe for Heap

impl PSafe for BuddyAlloc

impl<'a, T> !PSafe for IterHelper<'a, T>

impl<'a, T, A> !PSafe for MutexGuard<'a, T, A>

impl<'b, T, A> !PSafe for Ref<'b, T, A>

impl<'b, T, A> !PSafe for RefMut<'b, T, A>

impl<A> !PSafe for Measure<A>

impl<A> PSafe for Notifier<A>

impl<A> PSafe for BuddyAlg<A> where
    A: PSafe

impl<A> PSafe for corundum::stm::pspd::Scratchpad<A>

impl<A> PSafe for Log<A>

impl<A> PSafe for corundum::stm::vspd::Scratchpad<A>

impl<A> PSafe for String<A>

impl<T> !PSafe for NonNull<T>

impl<T> !PSafe for IntoIteratorHelper<T>

impl<T> PSafe for AssertTxInSafe<T> where
    T: PSafe

impl<T, A> !PSafe for LogNonNull<T, A>

impl<T, A> PSafe for Zones<T, A> where
    A: PSafe,
    T: PSafe

impl<T, F = fn() -> T> !PSafe for LazyCell<T, F>

impl<T, const N: usize> PSafe for Ring<T, N> where
    T: PSafe

impl<T: ?Sized, A> PSafe for Pbox<T, A>

impl<T: ?Sized, A> PSafe for Prc<T, A>

impl<T: ?Sized, A> PSafe for corundum::prc::Weak<T, A>

impl<T: ?Sized, A> PSafe for Parc<T, A>

impl<T: ?Sized, A> PSafe for corundum::sync::Weak<T, A>

Loading content...