From ff4b4bb5b735819a7bd1fd9192ff725d9808be77 Mon Sep 17 00:00:00 2001 From: timofey Date: Sun, 7 May 2023 16:47:03 +0000 Subject: [PATCH] re-implement `topology` via `points_typed` --- src/core.rs | 4 +--- src/core/points.rs | 7 +++++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/core.rs b/src/core.rs index e72d986..a9afeea 100644 --- a/src/core.rs +++ b/src/core.rs @@ -67,9 +67,7 @@ pub trait Mentionable<'a, Ctx: 'a + Context>: 'a + Serializable { /// Used for walking over object trees to ensure two objects with different references don't collide. fn topology(&self) -> Hash { let mut vec = Vec::new(); - for point in self.points_vec() { - vec.extend(point.point); - } + self.points_typed(&mut vec); Ctx::hash(&vec) } /// References ([Point]s) to other objects. Typed. diff --git a/src/core/points.rs b/src/core/points.rs index b7316f3..05ca2f3 100644 --- a/src/core/points.rs +++ b/src/core/points.rs @@ -3,3 +3,10 @@ use super::*; pub trait TakesPoints<'a, Ctx: 'a + Context> { fn take>(&mut self, point: &Point<'a, Ctx, A>); } + +impl<'a, Ctx: 'a + Context> TakesPoints<'a, Ctx> for Vec { + /// The only natural implementation, as used in [`Mentionable::topology`]. + fn take>(&mut self, point: &Point<'a, Ctx, A>) { + self.extend(point.point) + } +}