/**
  * Returns the index for the specified edge. Calculates the indices for <code>e</code> and for all
  * edges parallel to <code>e</code>.
  */
 public int getIndex(Graph<V, E> graph, E e) {
   Integer index = edge_index.get(e);
   if (index == null) {
     Pair<V> endpoints = graph.getEndpoints(e);
     V u = endpoints.getFirst();
     V v = endpoints.getSecond();
     if (u.equals(v)) {
       index = getIndex(graph, e, v);
     } else {
       index = getIndex(graph, e, u, v);
     }
   }
   return index.intValue();
 }
 /**
  * Resets the indices for this edge and its parallel edges. Should be invoked when an edge
  * parallel to <code>e</code> has been added or removed.
  *
  * @param e
  */
 public void reset(Graph<V, E> graph, E e) {
   Pair<V> endpoints = graph.getEndpoints(e);
   getIndex(graph, e, endpoints.getFirst());
   getIndex(graph, e, endpoints.getFirst(), endpoints.getSecond());
 }