/*
* Created on Dec 8, 2005
*/
package org.seqcode.gseutils;
import java.util.LinkedList;
/**
* @author tdanford
*/
public interface Predicate<X> {
public boolean accepts(X v);
public static class All<K> implements Predicate<K> {
public boolean accepts(K v) {
return true;
}
}
public static class Not<K> implements Predicate<K> {
protected Predicate<K> pred;
public Not(Predicate<K> p1) {
pred = p1;
}
public boolean accepts(K v) {
return !pred.accepts(v);
}
}
public static class And<K> implements Predicate<K> {
protected LinkedList<Predicate<K>> preds;
public And(Predicate<K> p1, Predicate<K> p2) {
preds = new LinkedList<Predicate<K>>();
preds.addLast(p1);
preds.addLast(p2);
}
public And() {
preds = new LinkedList<Predicate<K>>();
}
public boolean accepts(K v) {
for(Predicate<K> p : preds) {
if(!p.accepts(v)) {
return false;
}
}
return true;
}
}
public static class Or<K> implements Predicate<K> {
protected LinkedList<Predicate<K>> preds;
public Or(Predicate<K> p1, Predicate<K> p2) {
preds = new LinkedList<Predicate<K>>();
preds.addLast(p1);
preds.addLast(p2);
}
public Or() {
preds = new LinkedList<Predicate<K>>();
}
public boolean accepts(K v) {
for(Predicate<K> p : preds) {
if(p.accepts(v)) {
return true;
}
}
return false;
}
}
}