radn-rs/src/rcore/topology.rs
2023-09-03 20:08:42 +00:00

22 lines
741 B
Rust

use super::*;
/// Topological [Mentionable]. Allows iterating over [Point]s it references, if any;
pub trait MentionableTop<'a, Ctx: Context<'a>>: 'a {
/// See implementation for the definition.
/// Hash of all the references' points concatenated, ordered, non-unique.
/// Used for walking over object trees to ensure two objects with different references don't collide.
fn topology(&self) -> Hash
where
Self: Mentionable<'a, Ctx>,
{
let mut vec = Vec::new();
self.points_typed(&mut vec);
Ctx::hash(&vec)
}
/// References ([Point]s) to other objects. Typed.
fn points_typed(&self, points: &mut impl PointsVisitor<'a, Ctx>)
where
Self: Mentionable<'a, Ctx>;
}