EvalNodeRatPow.java
package edu.udel.cis.vsl.sarl.simplify.eval;
import java.math.BigInteger;
/**
* A node representing a power operation: a base raised to some fixed power.
* This node has one child, the base. The exponent is a constant number, so a
* field in this node.
*
* @author siegel
*/
class EvalNodeRatPow extends EvalNodeRat {
private EvalNodeRat base;
protected BigInteger exponent;
EvalNodeRatPow(EvalNodeRat base, BigInteger exponent) {
this.base = base;
this.exponent = exponent;
base.addParent(this);
}
Rat evaluate() {
if (value == null) {
value = new Rat(base.evaluate());
value.power(exponent);
}
return clearOnCount();
}
@Override
public EvalNodeKind kind() {
return EvalNodeKind.POW;
}
@Override
public int isoCode() {
if (isoCode == 0) {
isoCode = base.isoCode;
isoCode = isoCode ^ EvalNodeKind.POW.hashCode()
^ (depth() * 179426339) ^ parents.size()
^ exponent.hashCode();
}
return isoCode;
}
}