pub unsafe trait TraceImmutable: Trace {
// Required method
fn visit_immutable<V: GcVisitor>(
&self,
visitor: &mut V,
) -> Result<(), V::Err>;
}Expand description
A type that can be safely traced/relocated without having to use a mutable reference
Types with interior mutability (like RefCell or Cell<Gc<T>>)
can safely implement this, since they allow safely relocating the pointer
without a mutable reference.
Likewise primitives (with new garbage collected data) can also
implement this (since they have nothing to trace).
Required Methods§
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.
Implementations on Foreign Types§
Source§impl TraceImmutable for f32
impl TraceImmutable for f32
Source§impl TraceImmutable for f64
impl TraceImmutable for f64
Source§impl TraceImmutable for i8
impl TraceImmutable for i8
Source§impl TraceImmutable for i16
impl TraceImmutable for i16
Source§impl TraceImmutable for i32
impl TraceImmutable for i32
Source§impl TraceImmutable for i64
impl TraceImmutable for i64
Source§impl TraceImmutable for isize
impl TraceImmutable for isize
Source§impl TraceImmutable for u8
impl TraceImmutable for u8
Source§impl TraceImmutable for u16
impl TraceImmutable for u16
Source§impl TraceImmutable for u32
impl TraceImmutable for u32
Source§impl TraceImmutable for u64
impl TraceImmutable for u64
Source§impl TraceImmutable for ()
impl TraceImmutable for ()
Source§impl TraceImmutable for usize
impl TraceImmutable for usize
Source§impl TraceImmutable for String
impl TraceImmutable for String
Source§impl<'a, T: TraceImmutable> TraceImmutable for &'a T
impl<'a, T: TraceImmutable> TraceImmutable for &'a T
Source§impl<'a, T: TraceImmutable> TraceImmutable for &'a mut T
impl<'a, T: TraceImmutable> TraceImmutable for &'a mut T
Source§impl<A> TraceImmutable for (A,)where
A: TraceImmutable,
impl<A> TraceImmutable for (A,)where
A: TraceImmutable,
Source§impl<A, B> TraceImmutable for (A, B)where
A: TraceImmutable,
B: TraceImmutable,
impl<A, B> TraceImmutable for (A, B)where
A: TraceImmutable,
B: TraceImmutable,
Source§impl<A, B, C> TraceImmutable for (A, B, C)
impl<A, B, C> TraceImmutable for (A, B, C)
Source§impl<A, B, C, D> TraceImmutable for (A, B, C, D)
impl<A, B, C, D> TraceImmutable for (A, B, C, D)
Source§impl<A, B, C, D, E> TraceImmutable for (A, B, C, D, E)where
A: TraceImmutable,
B: TraceImmutable,
C: TraceImmutable,
D: TraceImmutable,
E: TraceImmutable,
impl<A, B, C, D, E> TraceImmutable for (A, B, C, D, E)where
A: TraceImmutable,
B: TraceImmutable,
C: TraceImmutable,
D: TraceImmutable,
E: TraceImmutable,
Source§impl<A, B, C, D, E, F> TraceImmutable for (A, B, C, D, E, F)where
A: TraceImmutable,
B: TraceImmutable,
C: TraceImmutable,
D: TraceImmutable,
E: TraceImmutable,
F: TraceImmutable,
impl<A, B, C, D, E, F> TraceImmutable for (A, B, C, D, E, F)where
A: TraceImmutable,
B: TraceImmutable,
C: TraceImmutable,
D: TraceImmutable,
E: TraceImmutable,
F: TraceImmutable,
Source§impl<A, B, C, D, E, F, G> TraceImmutable for (A, B, C, D, E, F, G)where
A: TraceImmutable,
B: TraceImmutable,
C: TraceImmutable,
D: TraceImmutable,
E: TraceImmutable,
F: TraceImmutable,
G: TraceImmutable,
impl<A, B, C, D, E, F, G> TraceImmutable for (A, B, C, D, E, F, G)where
A: TraceImmutable,
B: TraceImmutable,
C: TraceImmutable,
D: TraceImmutable,
E: TraceImmutable,
F: TraceImmutable,
G: TraceImmutable,
Source§impl<A, B, C, D, E, F, G, H> TraceImmutable for (A, B, C, D, E, F, G, H)where
A: TraceImmutable,
B: TraceImmutable,
C: TraceImmutable,
D: TraceImmutable,
E: TraceImmutable,
F: TraceImmutable,
G: TraceImmutable,
H: TraceImmutable,
impl<A, B, C, D, E, F, G, H> TraceImmutable for (A, B, C, D, E, F, G, H)where
A: TraceImmutable,
B: TraceImmutable,
C: TraceImmutable,
D: TraceImmutable,
E: TraceImmutable,
F: TraceImmutable,
G: TraceImmutable,
H: TraceImmutable,
Source§impl<A, B, C, D, E, F, G, H, I> TraceImmutable for (A, B, C, D, E, F, G, H, I)where
A: TraceImmutable,
B: TraceImmutable,
C: TraceImmutable,
D: TraceImmutable,
E: TraceImmutable,
F: TraceImmutable,
G: TraceImmutable,
H: TraceImmutable,
I: TraceImmutable,
impl<A, B, C, D, E, F, G, H, I> TraceImmutable for (A, B, C, D, E, F, G, H, I)where
A: TraceImmutable,
B: TraceImmutable,
C: TraceImmutable,
D: TraceImmutable,
E: TraceImmutable,
F: TraceImmutable,
G: TraceImmutable,
H: TraceImmutable,
I: TraceImmutable,
Source§impl<K, V> TraceImmutable for HashMap<K, V>where
K: TraceImmutable,
V: TraceImmutable,
impl<K, V> TraceImmutable for HashMap<K, V>where
K: TraceImmutable,
V: TraceImmutable,
fn visit_immutable<Visit: GcVisitor>( &self, visitor: &mut Visit, ) -> Result<(), Visit::Err>
Source§impl<T> TraceImmutable for Rc<T>where
T: TraceImmutable,
impl<T> TraceImmutable for Rc<T>where
T: TraceImmutable,
Source§impl<T> TraceImmutable for Arc<T>where
T: TraceImmutable,
impl<T> TraceImmutable for Arc<T>where
T: TraceImmutable,
Source§impl<T: TraceImmutable> TraceImmutable for Option<T>
impl<T: TraceImmutable> TraceImmutable for Option<T>
Source§impl<T: TraceImmutable> TraceImmutable for [T; 0]
impl<T: TraceImmutable> TraceImmutable for [T; 0]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 1]
impl<T: TraceImmutable> TraceImmutable for [T; 1]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 2]
impl<T: TraceImmutable> TraceImmutable for [T; 2]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 3]
impl<T: TraceImmutable> TraceImmutable for [T; 3]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 4]
impl<T: TraceImmutable> TraceImmutable for [T; 4]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 5]
impl<T: TraceImmutable> TraceImmutable for [T; 5]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 6]
impl<T: TraceImmutable> TraceImmutable for [T; 6]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 7]
impl<T: TraceImmutable> TraceImmutable for [T; 7]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 8]
impl<T: TraceImmutable> TraceImmutable for [T; 8]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 9]
impl<T: TraceImmutable> TraceImmutable for [T; 9]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 10]
impl<T: TraceImmutable> TraceImmutable for [T; 10]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 11]
impl<T: TraceImmutable> TraceImmutable for [T; 11]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 12]
impl<T: TraceImmutable> TraceImmutable for [T; 12]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 13]
impl<T: TraceImmutable> TraceImmutable for [T; 13]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 14]
impl<T: TraceImmutable> TraceImmutable for [T; 14]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 15]
impl<T: TraceImmutable> TraceImmutable for [T; 15]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 16]
impl<T: TraceImmutable> TraceImmutable for [T; 16]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 17]
impl<T: TraceImmutable> TraceImmutable for [T; 17]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 18]
impl<T: TraceImmutable> TraceImmutable for [T; 18]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 19]
impl<T: TraceImmutable> TraceImmutable for [T; 19]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 20]
impl<T: TraceImmutable> TraceImmutable for [T; 20]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 24]
impl<T: TraceImmutable> TraceImmutable for [T; 24]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 32]
impl<T: TraceImmutable> TraceImmutable for [T; 32]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 48]
impl<T: TraceImmutable> TraceImmutable for [T; 48]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 64]
impl<T: TraceImmutable> TraceImmutable for [T; 64]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 100]
impl<T: TraceImmutable> TraceImmutable for [T; 100]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 128]
impl<T: TraceImmutable> TraceImmutable for [T; 128]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 256]
impl<T: TraceImmutable> TraceImmutable for [T; 256]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 512]
impl<T: TraceImmutable> TraceImmutable for [T; 512]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 1024]
impl<T: TraceImmutable> TraceImmutable for [T; 1024]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 2048]
impl<T: TraceImmutable> TraceImmutable for [T; 2048]
Source§impl<T: TraceImmutable> TraceImmutable for [T; 4096]
impl<T: TraceImmutable> TraceImmutable for [T; 4096]
Source§impl<T: TraceImmutable> TraceImmutable for [T]
impl<T: TraceImmutable> TraceImmutable for [T]
Source§impl<T: TraceImmutable> TraceImmutable for Box<T>
impl<T: TraceImmutable> TraceImmutable for Box<T>
Source§impl<T: TraceImmutable> TraceImmutable for Vec<T>
impl<T: TraceImmutable> TraceImmutable for Vec<T>
Source§impl<T: TraceImmutable> TraceImmutable for Wrapping<T>
impl<T: TraceImmutable> TraceImmutable for Wrapping<T>
Source§impl<V> TraceImmutable for HashSet<V>where
V: TraceImmutable,
impl<V> TraceImmutable for HashSet<V>where
V: TraceImmutable,
fn visit_immutable<Visit: GcVisitor>( &self, visitor: &mut Visit, ) -> Result<(), Visit::Err>
Implementors§
impl<T> TraceImmutable for AssumeNotTraced<T>
impl<T: GcSafe + NullTrace + Copy> TraceImmutable for GcCell<T>
See Trace documentation on the safety of mutation
We require NullTrace in order to set our internals