net.sf.jga.fn.algorithm

Class FindMismatch<T>

public class FindMismatch<T> extends AbstractUnaryFunctor<Iterator<? extends T>,LookAheadIterator<T>> implements Serializable

Locates the next element in an iteration that is not equal to the corresponding element in a given collection.

Copyright © 2003 David A. Hall

Author: David A. Hall

Nested Class Summary
interfaceFindMismatch.Visitor
Interface for classes that may interpret a FindMismatch functor
Constructor Summary
FindMismatch(Collection<? extends T> elements)
Builds a FindMismatch functor that uses !equals() to compare elements.
FindMismatch(Collection<? extends T> elements, BinaryFunctor<T,T,Boolean> neq)
Builds a FindMismatch functor that uses the given functor to compare elements.
FindMismatch(Iterator<? extends T> iter, BinaryFunctor<T,T,Boolean> neq)
Builds one-time use FindMismatch finder that will test against the contents of an iteration rather than a collection.
Method Summary
voidaccept(Visitor v)
Calls the Visitor's visit(FindMismatch) method, if it implements the nested Visitor interface.
LookAheadIterator<T>fn(Iterator<? extends T> iterator)
Locates the first/next element in an iteration that is not the same as the corresponding element in the given collection/iteration.
BinaryFunctor<T,T,Boolean>getComparisonFn()
Returns the functor that is used to test matching elements
Collection<? extends T>getElements()
Returns the collection against which the argument will be compared.
LookAheadIterator<T>getMismatchedElement()
Returns an iterator pointing to mismatched element in the given collection/iteration on the last call to fn().
StringtoString()

Constructor Detail

FindMismatch

public FindMismatch(Collection<? extends T> elements)
Builds a FindMismatch functor that uses !equals() to compare elements. If the collection is null, an empty collection will be used for comparison.

FindMismatch

public FindMismatch(Collection<? extends T> elements, BinaryFunctor<T,T,Boolean> neq)
Builds a FindMismatch functor that uses the given functor to compare elements. The functor is expected to compare two arguments and return TRUE if they are not equal. If the collection is null, an empty collection will be used for comparison.

FindMismatch

public FindMismatch(Iterator<? extends T> iter, BinaryFunctor<T,T,Boolean> neq)
Builds one-time use FindMismatch finder that will test against the contents of an iteration rather than a collection. The functor is expected to compare two arguments and return TRUE if they are not equal.

A FindMismatch built this way cannot be used more than once as the contents of the iteration will be consumed in the first execution.

Method Detail

accept

public void accept(Visitor v)
Calls the Visitor's visit(FindMismatch) method, if it implements the nested Visitor interface.

fn

public LookAheadIterator<T> fn(Iterator<? extends T> iterator)
Locates the first/next element in an iteration that is not the same as the corresponding element in the given collection/iteration.

Returns: an iterator whose next() [if it hasNext()] points to the next element in the iteration that does not match the corresponding element in the given collection. If no such element exists and the iteration is longer than the the given collection, then the returned iterator's next() points to the first element that does not exist in the given collection. If no mismatched element exists and the collection is at least as long as the iteration, then the returned iterator's hasNext() will be false.

getComparisonFn

public BinaryFunctor<T,T,Boolean> getComparisonFn()
Returns the functor that is used to test matching elements

getElements

public Collection<? extends T> getElements()
Returns the collection against which the argument will be compared. When called on a FindMismatch built with an iteration rather than a collection, this method will return null

getMismatchedElement

public LookAheadIterator<T> getMismatchedElement()
Returns an iterator pointing to mismatched element in the given collection/iteration on the last call to fn(). This method may be called just once per call to fn(). If the iterator passed to the last call to fn() had no mismatch for the length of the collection, then the this iterator's hasNext() will be false.

Throws: IllegalStateException if called before a call to fn or called more than once afterword.

toString

public String toString()