package prefuse.data.expression;
import java.util.Iterator;
import prefuse.data.Tuple;
/**
* Predicate representing an "xor" clause of sub-predicates.
*
* @author <a href="http://jheer.org">jeffrey heer</a>
*/
public class XorPredicate extends CompositePredicate {
/**
* Create an empty XorPredicate. Empty XorPredicates return false
* by default.
*/
public XorPredicate() {
}
/**
* Create a new XorPredicate.
* @param p1 the sole clause of this predicate
*/
public XorPredicate(Predicate p1) {
add(p1);
}
/**
* Create a new XorPredicate.
* @param p1 the first clause of this predicate
* @param p2 the second clause of this predicate
*/
public XorPredicate(Predicate p1, Predicate p2) {
super(p1, p2);
}
/**
* @see prefuse.data.expression.Expression#getBoolean(prefuse.data.Tuple)
*/
public boolean getBoolean(Tuple t) {
if ( m_clauses.size() == 0 )
return false;
boolean val = false;
Iterator iter = m_clauses.iterator();
if ( iter.hasNext() ) {
val = ((Predicate)iter.next()).getBoolean(t);
}
while ( iter.hasNext() ) {
val ^= ((Predicate)iter.next()).getBoolean(t);
}
return val;
}
/**
* @see java.lang.Object#toString()
*/
public String toString() {
return ( size() == 0 ? "FALSE" : toString("XOR") );
}
} // end of class XorPredicate