Topology
All checks were successful
buildbot/cargo fmt (1.72) Build done.
buildbot/cargo clippy (1.72) Build done.
buildbot/cargo test (1.65) Build done.
buildbot/cargo doc (1.72) Build done.
buildbot/cargo clippy (1.65) Build done.

This commit is contained in:
AF 2023-09-03 21:30:41 +00:00
parent 62c2192541
commit 16a54b3912

View File

@ -18,12 +18,37 @@ pub trait MentionableTop<'a, Ctx: Context<'a>>: 'a {
fn points_typed(&self, points: &mut impl PointsVisitor<'a, Ctx>) fn points_typed(&self, points: &mut impl PointsVisitor<'a, Ctx>)
where where
Self: Mentionable<'a, Ctx>; Self: Mentionable<'a, Ctx>;
fn topology(&self) -> Arc<dyn Topology<'a, Ctx>>
where
Self: Mentionable<'a, Ctx>,
{
let mut vec: TopoVec<'a, Ctx> = Vec::new();
self.points_typed(&mut vec);
Arc::new(vec)
}
} }
pub type TopoVec<'a, Ctx> = Vec<Arc<dyn SingularResolution<'a, Ctx>>>; pub type TopoVec<'a, Ctx> = Vec<Arc<dyn SingularResolution<'a, Ctx>>>;
impl<'a, Ctx: Context<'a>> PointsVisitor<'a, Ctx> for TopoVec<'a, Ctx> { impl<'a, Ctx: Context<'a>> PointsVisitor<'a, Ctx> for TopoVec<'a, Ctx> {
fn visit<A: Mentionable<'a, Ctx>>(&mut self, point: &Point<'a, Ctx, A>) { fn visit<A: Mentionable<'a, Ctx>>(&mut self, point: &Point<'a, Ctx, A>) {
self.push(Arc::new(point.clone()) as _); self.push(Arc::new(point.clone()));
}
}
pub trait Topology<'a, Ctx: Context<'a>>: 'a {
fn points_count(&self) -> usize;
fn point_at(&self, index: usize) -> Option<Arc<dyn SingularResolution<'a, Ctx>>>;
}
impl<'a, Ctx: Context<'a>> Topology<'a, Ctx> for TopoVec<'a, Ctx> {
fn points_count(&self) -> usize {
self.len()
}
fn point_at(&self, index: usize) -> Option<Arc<dyn SingularResolution<'a, Ctx>>> {
self.get(index).cloned()
} }
} }