/******************************************************************************* * Copyright (c) 2002 - 2006 IBM Corporation. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package com.ibm.wala.fixedpoint.impl; import com.ibm.wala.fixpoint.AbstractStatement; import com.ibm.wala.fixpoint.IVariable; /** * Represents a single step, restricted to a nullary * operator. */ @SuppressWarnings("rawtypes") public abstract class NullaryStatement<T extends IVariable> extends AbstractStatement<T, NullaryOperator<T>> { /** * The operands */ final protected T lhs; /** * Evaluate this equation, setting a new value for the * left-hand side. * * @return true if the lhs value changed. false otherwise */ @Override public byte evaluate() { NullaryOperator<T> op = getOperator(); return op.evaluate(lhs); } /** * Return the left-hand side of this equation. * * @return the lattice cell this equation computes */ @Override public T getLHS() { return lhs; } /** * Does this equation contain an appearance of a given cell? * @param cell the cell in question * @return true or false */ @Override public boolean hasVariable(T cell) { return lhs == cell; } /** * Constructor for case of one operand on the right-hand side. * * @param lhs the lattice cell set by this equation */ protected NullaryStatement(T lhs) { super(); this.lhs = lhs; } @Override public boolean equals(Object o) { if (o instanceof NullaryStatement) { NullaryStatement other = (NullaryStatement) o; if (!getOperator().equals(other.getOperator())) { return false; } if (lhs == null) { if (other.lhs != null) { return false; } } else { if (other.lhs == null) { return false; } if (!lhs.equals(other.lhs)) { return false; } } return true; } else { return false; } } @Override public int hashCode() { int result = getOperator().hashCode() * 1381; if (lhs != null) { result += 1399 * lhs.hashCode(); } return result; } @Override public T[] getRHS() throws UnsupportedOperationException { throw new UnsupportedOperationException(); } }