abstract class Searcher<T extends Comparable<T>>
implements ISearch<T> {
public static int fail = -1;
private SeqValidator<T> validator = new SeqValidator<T>();
// ISearch methods
public int find(T[] seq, T key)
throws IllegalArgumentException {
validator.assertSeqNotEmpty(seq);
return maneuver(seq, key, 0, seq.length - 1);
}
public int find(T[] seq, T key, int from, int to)
throws IllegalArgumentException, IndexOutOfBoundsException {
validator.assertValidRange(seq, from, to);
return maneuver(seq, key, from, to);
}
// Abstract methods
public abstract int maneuver(T[] seq, T key, int from, int to);
}