/*
* Created on Sep 24, 2005
*
* Copyright (c) 2005, the JUNG Project and the Regents of the University
* of California
* All rights reserved.
*
* This software is open-source under the BSD license; see either
* "license.txt" or
* http://jung.sourceforge.net/license.txt for a description.
*/
package edu.uci.ics.jung.graph.util;
import edu.uci.ics.jung.graph.Graph;
/**
* An interface for a service to access the index of a given edge (in a given
* graph) into the set formed by the given edge and all the other edges it is
* parallel to.
*
* <p>
* Note that in current use, this index is assumed to be an integer value in the
* interval [0,n-1], where n-1 is the number of edges parallel to <code>e</code>
* .
*
* @author Tom Nelson
*
*/
public interface EdgeIndexFunction<V, E> {
/**
* Returns <code>e</code>'s index in <code>graph</code>. The index of
* <code>e</code> is defined as its position in some consistent ordering of
* <code>e</code> and all edges parallel to <code>e</code>.
*
* @param graph
* the graph in which the edge is to be queried
* @param e
* the edge whose index is to be queried
* @return <code>e</code>'s index in <code>graph</code>
*/
int getIndex(Graph<V, E> graph, E e);
/**
* Resets the indices for <code>edge</code> and its parallel edges in
* <code>graph</code>. Should be invoked when an edge parallel to
* <code>edge</code> has been added or removed.
*
* @param g
* the graph in which <code>edge</code>'s index is to be reset
* @param edge
* the edge whose index is to be reset
*/
void reset(Graph<V, E> g, E edge);
/**
* Clears all edge indices for all edges in all graphs. Does not recalculate
* the indices.
*/
void reset();
}