SymbolicQuery.java

package edu.udel.cis.vsl.tass.prove.ideal;

import edu.udel.cis.vsl.tass.symbolic.IF.SymbolicExpressionIF;


/**
 * A query consists of an assumption p and a predicate q, both boolean-valued
 * expressions. Two Query objects are equal iff theirs assumptions are equal and
 * their predicates are equal.
 */
public class SymbolicQuery {

	private SymbolicExpressionIF assumption;

	private SymbolicExpressionIF predicate;

	/**
	 * Creates new query. Query is immutable.
	 */
	SymbolicQuery(SymbolicExpressionIF assumption, SymbolicExpressionIF predicate) {
		if (assumption == null)
			throw new NullPointerException("null assumption");
		if (predicate == null)
			throw new NullPointerException("null predicate");
		this.assumption = assumption;
		this.predicate = predicate;
	}

	public SymbolicExpressionIF assumption() {
		return assumption;
	}

	public SymbolicExpressionIF predicate() {
		return predicate;
	}

	public int hashCode() {
		return assumption.hashCode() + predicate.hashCode();
	}

	public boolean equals(Object object) {
		if (object instanceof SymbolicQuery) {
			SymbolicQuery that = (SymbolicQuery) object;

			return assumption.equals(that.assumption)
					&& predicate.equals(that.predicate);
		}
		return false;
	}
}