insertUniqueEdge method

void insertUniqueEdge(
  1. Edge e
)

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.

Implementation

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.fromLabel(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()!));
  }
}