From f295adc5e71e8970d8223552c4e9d0447bd72d1a Mon Sep 17 00:00:00 2001 From: Schuyler Eldridge Date: Fri, 23 Feb 2018 18:03:42 -0500 Subject: Add graph summation "+" to DiGraph (#744) * Add DiGraph sum and DiGraph sum test Signed-off-by: Schuyler Eldridge * Make DiGraph sum deterministic Signed-off-by: Schuyler Eldridge * Remove ordered hashes/sets from DiGraphTests Signed-off-by: Schuyler Eldridge --- src/main/scala/firrtl/graph/DiGraph.scala | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src/main') diff --git a/src/main/scala/firrtl/graph/DiGraph.scala b/src/main/scala/firrtl/graph/DiGraph.scala index 6538c880..6dad56d7 100644 --- a/src/main/scala/firrtl/graph/DiGraph.scala +++ b/src/main/scala/firrtl/graph/DiGraph.scala @@ -308,6 +308,17 @@ class DiGraph[T] private[graph] (private[graph] val edges: LinkedHashMap[T, Link edges.foreach({ case (k, v) => eprime(f(k)) ++= v.map(f(_)) }) new DiGraph(eprime) } + + /** Graph sum of `this` and `that` + * + * @param that a second DiGraph[T] + * @return a DiGraph[T] containing all vertices and edges of each graph + */ + def +(that: DiGraph[T]): DiGraph[T] = { + val eprime = edges.clone + that.edges.map({ case (k, v) => eprime.getOrElseUpdate(k, new LinkedHashSet[T]) ++= v }) + new DiGraph(eprime) + } } class MutableDiGraph[T] extends DiGraph[T](new LinkedHashMap[T, LinkedHashSet[T]]) { -- cgit v1.2.3