package net.varkhan.base.functor.predicate;
import net.varkhan.base.functor.Predicate;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
/**
* <b></b>.
* <p/>
*
* @author varkhan
* @date 2/11/12
* @time 3:15 PM
*/
public class SetPredicate<A,C> implements Predicate<A,C> {
protected final Set<A> set;
public SetPredicate(A... vals) {
this.set = new HashSet<A>(vals.length);
for(A a: vals) this.set.add(a);
}
public SetPredicate(Iterator<A> vals) {
this.set = new HashSet<A>();
while(vals.hasNext()) this.set.add(vals.next());
}
public SetPredicate(Iterable<A> vals) {
this.set = new HashSet<A>();
for(A v: vals) this.set.add(v);
}
public SetPredicate(Set<A> set) {
this.set = set;
}
public boolean invoke(A arg, C ctx) {
return set.contains(arg);
}
@Override
public String toString() {
StringBuilder buf = new StringBuilder("~(");
boolean f = true;
for(A v: set) {
if(f) f = false;
else buf.append(',');
buf.append(v);
}
return buf.toString();
}
}