org.jgrapht.traverse
Class CrossComponentIterator<V,E,D>

java.lang.Object
  extended by org.jgrapht.traverse.AbstractGraphIterator<V,E>
      extended by org.jgrapht.traverse.CrossComponentIterator<V,E,D>
Type Parameters:
V - vertex type
E - edge type
D - type of data associated to seen vertices
All Implemented Interfaces:
java.util.Iterator<V>, GraphIterator<V,E>
Direct Known Subclasses:
BreadthFirstIterator, ClosestFirstIterator, DepthFirstIterator, TopologicalOrderIterator

public abstract class CrossComponentIterator<V,E,D>
extends AbstractGraphIterator<V,E>

Provides a cross-connected-component traversal functionality for iterator subclasses.

Since:
Jan 31, 2004
Author:
Barak Naveh

Nested Class Summary
protected static class CrossComponentIterator.VisitColor
          Standard vertex visit state enumeration.
 
Field Summary
 
Fields inherited from class org.jgrapht.traverse.AbstractGraphIterator
nListeners
 
Constructor Summary
CrossComponentIterator(Graph<V,E> g, V startVertex)
          Creates a new iterator for the specified graph.
 
Method Summary
protected abstract  void encounterVertex(V vertex, E edge)
          Update data structures the first time we see a vertex.
protected abstract  void encounterVertexAgain(V vertex, E edge)
          Called whenever we re-encounter a vertex.
protected  void finishVertex(V vertex)
          Called when a vertex has been finished (meaning is dependent on traversal represented by subclass).
 Graph<V,E> getGraph()
           
protected  D getSeenData(V vertex)
          Access the data stored for a seen vertex.
 boolean hasNext()
           
protected abstract  boolean isConnectedComponentExhausted()
          Returns true if there are no more uniterated vertices in the currently iterated connected component; false otherwise.
protected  boolean isSeenVertex(java.lang.Object vertex)
          Determines whether a vertex has been seen yet by this traversal.
 V next()
           
protected abstract  V provideNextVertex()
          Returns the vertex to be returned in the following call to the iterator next method.
protected  D putSeenData(V vertex, D data)
          Stores iterator-dependent data for a vertex that has been seen.
 
Methods inherited from class org.jgrapht.traverse.AbstractGraphIterator
addTraversalListener, fireConnectedComponentFinished, fireConnectedComponentStarted, fireEdgeTraversed, fireVertexFinished, fireVertexTraversed, isCrossComponentTraversal, isReuseEvents, remove, removeTraversalListener, setCrossComponentTraversal, setReuseEvents
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CrossComponentIterator

public CrossComponentIterator(Graph<V,E> g,
                              V startVertex)
Creates a new iterator for the specified graph. Iteration will start at the specified start vertex. If the specified start vertex is null, Iteration will start at an arbitrary graph vertex.

Parameters:
g - the graph to be iterated.
startVertex - the vertex iteration to be started.
Throws:
java.lang.IllegalArgumentException - if g==null or does not contain startVertex
Method Detail

getGraph

public Graph<V,E> getGraph()
Returns:
the graph being traversed

hasNext

public boolean hasNext()
See Also:
Iterator.hasNext()

next

public V next()
See Also:
Iterator.next()

isConnectedComponentExhausted

protected abstract boolean isConnectedComponentExhausted()
Returns true if there are no more uniterated vertices in the currently iterated connected component; false otherwise.

Returns:
true if there are no more uniterated vertices in the currently iterated connected component; false otherwise.

encounterVertex

protected abstract void encounterVertex(V vertex,
                                        E edge)
Update data structures the first time we see a vertex.

Parameters:
vertex - the vertex encountered
edge - the edge via which the vertex was encountered, or null if the vertex is a starting point

provideNextVertex

protected abstract V provideNextVertex()
Returns the vertex to be returned in the following call to the iterator next method.

Returns:
the next vertex to be returned by this iterator.

getSeenData

protected D getSeenData(V vertex)
Access the data stored for a seen vertex.

Parameters:
vertex - a vertex which has already been seen.
Returns:
data associated with the seen vertex or null if no data was associated with the vertex. A null return can also indicate that the vertex was explicitly associated with null.

isSeenVertex

protected boolean isSeenVertex(java.lang.Object vertex)
Determines whether a vertex has been seen yet by this traversal.

Parameters:
vertex - vertex in question
Returns:
true if vertex has already been seen

encounterVertexAgain

protected abstract void encounterVertexAgain(V vertex,
                                             E edge)
Called whenever we re-encounter a vertex. The default implementation does nothing.

Parameters:
vertex - the vertex re-encountered
edge - the edge via which the vertex was re-encountered

putSeenData

protected D putSeenData(V vertex,
                        D data)
Stores iterator-dependent data for a vertex that has been seen.

Parameters:
vertex - a vertex which has been seen.
data - data to be associated with the seen vertex.
Returns:
previous value associated with specified vertex or null if no data was associated with the vertex. A null return can also indicate that the vertex was explicitly associated with null.

finishVertex

protected void finishVertex(V vertex)
Called when a vertex has been finished (meaning is dependent on traversal represented by subclass).

Parameters:
vertex - vertex which has been finished