/** * Inserted edges are checked to see if an identical edge already exists. If so, the edge is not * inserted, but its label is merged with the existing edge. */ protected void insertUniqueEdge(Edge e) { // <FIX> MD 8 Oct 03 speed up identical edge lookup // fast lookup Edge existingEdge = edgeList.findEqualEdge(e); // If an identical edge already exists, simply update its label if (existingEdge != null) { Label existingLabel = existingEdge.getLabel(); Label labelToMerge = e.getLabel(); // check if new edge is in reverse direction to existing edge // if so, must flip the label before merging it if (!existingEdge.isPointwiseEqual(e)) { labelToMerge = new Label(e.getLabel()); labelToMerge.flip(); } existingLabel.merge(labelToMerge); // compute new depth delta of sum of edges int mergeDelta = depthDelta(labelToMerge); int existingDelta = existingEdge.getDepthDelta(); int newDelta = existingDelta + mergeDelta; existingEdge.setDepthDelta(newDelta); } else { // no matching existing edge was found // add this new edge to the list of edges in this graph // e.setName(name + edges.size()); edgeList.add(e); e.setDepthDelta(depthDelta(e.getLabel())); } }
/** For each dirEdge in the star, merge the label from the sym dirEdge into the label */ public void mergeSymLabels() { for (Iterator it = iterator(); it.hasNext(); ) { DirectedEdge de = (DirectedEdge) it.next(); Label label = de.getLabel(); label.merge(de.getSym().getLabel()); } }