pub unsafe trait Traverse {
// Required method
fn traverse(&self, traverse_fn: &mut TraverseFn<'_>);
}
Expand description
Type that need traverse it’s children should impl Traverse
(Not MaybeTraverse
)
§Safety
Please carefully read [traverse()
] and follow the guideline
Required Methods§
Sourcefn traverse(&self, traverse_fn: &mut TraverseFn<'_>)
fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)
impl traverse()
with caution! Following those guideline so traverse doesn’t cause memory error!:
-
Make sure that every owned object(Every PyObjectRef/PyRef) is called with traverse_fn at most once. If some field is not called, the worst results is just memory leak, but if some field is called repeatedly, panic and deadlock can happen.
-
DO NOT clone a
PyObjectRef
orPyef<T>
intraverse()
Implementations on Foreign Types§
Source§impl Traverse for IndexMap<&'static PyStrInterned, PyObjectRef, RandomState>
impl Traverse for IndexMap<&'static PyStrInterned, PyObjectRef, RandomState>
fn traverse(&self, tracer_fn: &mut TraverseFn<'_>)
Source§impl Traverse for IndexMap<String, PyObjectRef>
impl Traverse for IndexMap<String, PyObjectRef>
fn traverse(&self, tracer_fn: &mut TraverseFn<'_>)
Source§impl<A: Traverse, B: Traverse> Traverse for (A, B)
impl<A: Traverse, B: Traverse> Traverse for (A, B)
fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)
Source§impl<A: Traverse, B: Traverse, C: Traverse> Traverse for (A, B, C)
impl<A: Traverse, B: Traverse, C: Traverse> Traverse for (A, B, C)
fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)
Source§impl<A: Traverse, B: Traverse, C: Traverse, D: Traverse> Traverse for (A, B, C, D)
impl<A: Traverse, B: Traverse, C: Traverse, D: Traverse> Traverse for (A, B, C, D)
fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)
Source§impl<A: Traverse, B: Traverse, C: Traverse, D: Traverse, E: Traverse> Traverse for (A, B, C, D, E)
impl<A: Traverse, B: Traverse, C: Traverse, D: Traverse, E: Traverse> Traverse for (A, B, C, D, E)
fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)
Source§impl<A: Traverse, B: Traverse, C: Traverse, D: Traverse, E: Traverse, F: Traverse> Traverse for (A, B, C, D, E, F)
impl<A: Traverse, B: Traverse, C: Traverse, D: Traverse, E: Traverse, F: Traverse> Traverse for (A, B, C, D, E, F)
fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)
Source§impl<A: Traverse, B: Traverse, C: Traverse, D: Traverse, E: Traverse, F: Traverse, G: Traverse> Traverse for (A, B, C, D, E, F, G)
impl<A: Traverse, B: Traverse, C: Traverse, D: Traverse, E: Traverse, F: Traverse, G: Traverse> Traverse for (A, B, C, D, E, F, G)
fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)
Source§impl<A: Traverse, B: Traverse, C: Traverse, D: Traverse, E: Traverse, F: Traverse, G: Traverse, H: Traverse> Traverse for (A, B, C, D, E, F, G, H)
impl<A: Traverse, B: Traverse, C: Traverse, D: Traverse, E: Traverse, F: Traverse, G: Traverse, H: Traverse> Traverse for (A, B, C, D, E, F, G, H)
fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)
Source§impl<A: Traverse, B: Traverse, C: Traverse, D: Traverse, E: Traverse, F: Traverse, G: Traverse, H: Traverse, I: Traverse> Traverse for (A, B, C, D, E, F, G, H, I)
impl<A: Traverse, B: Traverse, C: Traverse, D: Traverse, E: Traverse, F: Traverse, G: Traverse, H: Traverse, I: Traverse> Traverse for (A, B, C, D, E, F, G, H, I)
fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)
Source§impl<A: Traverse, B: Traverse, C: Traverse, D: Traverse, E: Traverse, F: Traverse, G: Traverse, H: Traverse, I: Traverse, J: Traverse> Traverse for (A, B, C, D, E, F, G, H, I, J)
impl<A: Traverse, B: Traverse, C: Traverse, D: Traverse, E: Traverse, F: Traverse, G: Traverse, H: Traverse, I: Traverse, J: Traverse> Traverse for (A, B, C, D, E, F, G, H, I, J)
fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)
Source§impl<A: Traverse, B: Traverse, C: Traverse, D: Traverse, E: Traverse, F: Traverse, G: Traverse, H: Traverse, I: Traverse, J: Traverse, K: Traverse> Traverse for (A, B, C, D, E, F, G, H, I, J, K)
impl<A: Traverse, B: Traverse, C: Traverse, D: Traverse, E: Traverse, F: Traverse, G: Traverse, H: Traverse, I: Traverse, J: Traverse, K: Traverse> Traverse for (A, B, C, D, E, F, G, H, I, J, K)
fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)
Source§impl<A: Traverse, B: Traverse, C: Traverse, D: Traverse, E: Traverse, F: Traverse, G: Traverse, H: Traverse, I: Traverse, J: Traverse, K: Traverse, L: Traverse> Traverse for (A, B, C, D, E, F, G, H, I, J, K, L)
impl<A: Traverse, B: Traverse, C: Traverse, D: Traverse, E: Traverse, F: Traverse, G: Traverse, H: Traverse, I: Traverse, J: Traverse, K: Traverse, L: Traverse> Traverse for (A, B, C, D, E, F, G, H, I, J, K, L)
fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)
Source§impl<T> Traverse for [T]where
T: Traverse,
impl<T> Traverse for [T]where
T: Traverse,
fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)
Source§impl<T> Traverse for Box<[T]>where
T: Traverse,
impl<T> Traverse for Box<[T]>where
T: Traverse,
fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)
Source§impl<T> Traverse for Vec<T>where
T: Traverse,
impl<T> Traverse for Vec<T>where
T: Traverse,
fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)
Source§impl<T: Traverse> Traverse for Option<T>
impl<T: Traverse> Traverse for Option<T>
fn traverse(&self, traverse_fn: &mut TraverseFn<'_>)
Source§impl<T: Traverse> Traverse for PyMutex<T>
Safety: We can’t hold lock during traverse it’s child because it may cause deadlock.
TODO(discord9): check if this is thread-safe to do
(Outside of gc phase, only incref/decref will call trace,
and refcnt is atomic, so it should be fine?)
impl<T: Traverse> Traverse for PyMutex<T>
Safety: We can’t hold lock during traverse it’s child because it may cause deadlock. TODO(discord9): check if this is thread-safe to do (Outside of gc phase, only incref/decref will call trace, and refcnt is atomic, so it should be fine?)