From e271c82b7e626a77c660173f6df85cb41064229c Mon Sep 17 00:00:00 2001 From: Mikolaj Wielgus Date: Thu, 19 Oct 2023 22:37:31 +0000 Subject: [PATCH] graph: Remove `Tag` trait Name `Index` enum variants explicitly instead. --- src/band.rs | 8 ++++---- src/graph.rs | 24 ------------------------ src/layout.rs | 34 +++++++++++++++++----------------- src/main.rs | 18 +++++++++--------- 4 files changed, 30 insertions(+), 54 deletions(-) diff --git a/src/band.rs b/src/band.rs index cbbb5d3..5716d68 100644 --- a/src/band.rs +++ b/src/band.rs @@ -1,7 +1,7 @@ use petgraph::stable_graph::StableDiGraph; use crate::{ - graph::{DotIndex, Ends, Index, Interior, Label, Tag, Weight}, + graph::{DotIndex, Ends, Index, Interior, Label, Weight}, primitive::GenericPrimitive, }; @@ -16,12 +16,12 @@ impl Band { dot: DotIndex, graph: &StableDiGraph, ) -> Option { - let mut next_index = dot.tag(); + let mut next_index = Index::Dot(dot); let mut interior = vec![]; while let Some(index) = untag!( next_index, - GenericPrimitive::new(next_index, graph).tagged_next() + GenericPrimitive::new(next_index, graph).tagged_prev() ) { interior.push(index); next_index = index; @@ -42,7 +42,7 @@ impl Band { dot: DotIndex, graph: &StableDiGraph, ) -> Option { - let mut prev_index = dot.tag(); + let mut prev_index = Index::Dot(dot); let mut interior = vec![]; while let Some(index) = untag!( diff --git a/src/graph.rs b/src/graph.rs index e54a7d3..abe8fa9 100644 --- a/src/graph.rs +++ b/src/graph.rs @@ -112,10 +112,6 @@ impl GetNodeIndex for GenericIndex { } } -pub trait Tag { - fn tag(&self) -> Index; -} - macro_rules! untag { ($index:ident, $expr:expr) => { match $index { @@ -127,25 +123,5 @@ macro_rules! untag { } pub type DotIndex = GenericIndex; - -impl Tag for DotIndex { - fn tag(&self) -> Index { - Index::Dot(*self) - } -} - pub type SegIndex = GenericIndex; - -impl Tag for SegIndex { - fn tag(&self) -> Index { - Index::Seg(*self) - } -} - pub type BendIndex = GenericIndex; - -impl Tag for BendIndex { - fn tag(&self) -> Index { - Index::Bend(*self) - } -} diff --git a/src/layout.rs b/src/layout.rs index 6a0f39c..8c1b62b 100644 --- a/src/layout.rs +++ b/src/layout.rs @@ -10,7 +10,7 @@ use crate::band::Band; use crate::bow::Bow; use crate::graph::{ BendIndex, BendWeight, DotIndex, DotWeight, GenericIndex, GetNodeIndex, Index, Interior, Label, - Retag, SegIndex, SegWeight, Tag, Weight, + Retag, SegIndex, SegWeight, Weight, }; use crate::primitive::{GenericPrimitive, MakeShape}; use crate::segbend::Segbend; @@ -60,8 +60,8 @@ impl Layout { pub fn add_dot(&mut self, weight: DotWeight) -> Result { let dot = DotIndex::new(self.graph.add_node(Weight::Dot(weight))); - self.insert_into_rtree(dot.tag()); - self.fail_and_remove_if_collides_except(dot.tag(), &[])?; + self.insert_into_rtree(Index::Dot(dot)); + self.fail_and_remove_if_collides_except(Index::Dot(dot), &[])?; Ok(dot) } @@ -81,8 +81,8 @@ impl Layout { self.graph .add_edge(seg.node_index(), to.node_index(), Label::End); - self.insert_into_rtree(seg.tag()); - self.fail_and_remove_if_collides_except(seg.tag(), &[from.tag(), to.tag()])?; + self.insert_into_rtree(Index::Seg(seg)); + self.fail_and_remove_if_collides_except(Index::Seg(seg), &[])?; self.graph .node_weight_mut(from.node_index()) @@ -136,8 +136,8 @@ impl Layout { self.graph .add_edge(bend.node_index(), core.node_index(), Label::Core); - self.insert_into_rtree(bend.tag()); - self.fail_and_remove_if_collides_except(bend.tag(), &[from.tag(), to.tag(), core.tag()])?; + self.insert_into_rtree(Index::Bend(bend)); + self.fail_and_remove_if_collides_except(Index::Bend(bend), &[Index::Dot(core)])?; Ok(bend) } @@ -177,8 +177,8 @@ impl Layout { self.graph .add_edge(inner.node_index(), bend.node_index(), Label::Outer); - self.insert_into_rtree(bend.tag()); - self.fail_and_remove_if_collides_except(bend.tag(), &[from.tag(), to.tag(), core.tag()])?; + self.insert_into_rtree(Index::Bend(bend)); + self.fail_and_remove_if_collides_except(Index::Bend(bend), &[Index::Dot(core)])?; Ok(bend) } @@ -186,7 +186,7 @@ impl Layout { #[debug_ensures(self.graph.edge_count() == old(self.graph.edge_count()) || self.graph.edge_count() == old(self.graph.edge_count() + 1))] pub fn reattach_bend(&mut self, bend: BendIndex, inner: BendIndex) { - self.remove_from_rtree(bend.tag()); + self.remove_from_rtree(Index::Bend(bend)); if let Some(old_inner_edge) = self .graph @@ -199,13 +199,13 @@ impl Layout { self.graph .add_edge(inner.node_index(), bend.node_index(), Label::Outer); - self.insert_into_rtree(bend.tag()); + self.insert_into_rtree(Index::Bend(bend)); } #[debug_ensures(self.graph.node_count() == old(self.graph.node_count()))] #[debug_ensures(self.graph.edge_count() == old(self.graph.edge_count()))] pub fn flip_bend(&mut self, bend: BendIndex) { - self.remove_from_rtree(bend.tag()); + self.remove_from_rtree(Index::Bend(bend)); let cw = self .graph .node_weight(bend.node_index()) @@ -219,7 +219,7 @@ impl Layout { .as_bend_mut() .unwrap() .cw = !cw; - self.insert_into_rtree(bend.tag()); + self.insert_into_rtree(Index::Bend(bend)); } pub fn bow(&self, bend: BendIndex) -> Bow { @@ -286,7 +286,7 @@ impl Layout { self.primitive(dot) .tagged_next() .map(|next| self.remove_from_rtree(next)); - self.remove_from_rtree(dot.tag()); + self.remove_from_rtree(Index::Dot(dot)); let mut dot_weight = self.primitive(dot).weight(); let old_weight = dot_weight; @@ -294,11 +294,11 @@ impl Layout { dot_weight.circle.pos = to; *self.graph.node_weight_mut(dot.node_index()).unwrap() = Weight::Dot(dot_weight); - if let Some(..) = self.detect_collision_except(dot.tag(), &[]) { + if let Some(..) = self.detect_collision_except(Index::Dot(dot), &[]) { // Restore original state. *self.graph.node_weight_mut(dot.node_index()).unwrap() = Weight::Dot(old_weight); - self.insert_into_rtree(dot.tag()); + self.insert_into_rtree(Index::Dot(dot)); self.primitive(dot) .tagged_prev() .map(|prev| self.insert_into_rtree(prev)); @@ -308,7 +308,7 @@ impl Layout { return Err(()); } - self.insert_into_rtree(dot.tag()); + self.insert_into_rtree(Index::Dot(dot)); self.primitive(dot) .tagged_prev() .map(|prev| self.insert_into_rtree(prev)); diff --git a/src/main.rs b/src/main.rs index c05838a..94df4ff 100644 --- a/src/main.rs +++ b/src/main.rs @@ -146,7 +146,7 @@ fn main() { let dot2 = router .layout .add_dot(DotWeight { - net: 15, + net: 1, circle: Circle { pos: (100.5, 500.5).into(), r: 8.0, @@ -157,7 +157,7 @@ fn main() { let dot_end = router .layout .add_dot(DotWeight { - net: 10, + net: 1, circle: Circle { pos: (470.5, 350.5).into(), r: 8.0, @@ -191,7 +191,7 @@ fn main() { dot1_1, dot2_1, SegWeight { - net: 20, + net: 2, width: 16.0, }, ); @@ -211,7 +211,7 @@ fn main() { dot2_1, dot2_2, SegWeight { - net: 20, + net: 2, width: 16.0, }, ); @@ -242,7 +242,7 @@ fn main() { dot3, dot4, SegWeight { - net: 20, + net: 2, width: 16.0, }, ); @@ -262,7 +262,7 @@ fn main() { dot4, dot5, SegWeight { - net: 20, + net: 2, width: 16.0, }, ); @@ -282,7 +282,7 @@ fn main() { dot3, dot1_2, SegWeight { - net: 20, + net: 2, width: 16.0, }, ); @@ -291,7 +291,7 @@ fn main() { dot1_2, dot2_2, SegWeight { - net: 20, + net: 2, width: 16.0, }, ); @@ -311,7 +311,7 @@ fn main() { dot5, dot6, SegWeight { - net: 20, + net: 2, width: 16.0, }, );