package com.googlecode.totallylazy.predicates;
import com.googlecode.totallylazy.functions.Function1;
import com.googlecode.totallylazy.Unchecked;
import com.googlecode.totallylazy.annotations.multimethod;
public class Not<T> extends LogicalPredicate<T> {
private final Predicate<T> predicate;
private Not(Predicate<T> predicate) {
this.predicate = predicate;
}
public static <T> Not<T> not(Predicate<? super T> predicate) {
return new Not<T>(Unchecked.<Predicate<T>>cast(predicate));
}
public boolean matches(T other) {
return !predicate.matches(other);
}
public Predicate<T> predicate() {
return predicate;
}
@Override
public int hashCode() {
return 31 * predicate.hashCode();
}
@multimethod
public boolean equals(Not other) {
return predicate.equals(other.predicate());
}
@Override
public String toString() {
return "not " + predicate().toString();
}
public static class functions {
public static <T> Function1<Not<T>, Predicate<T>> predicate() {
return not -> not.predicate();
}
}
}