/**
*
*/
package soottocfg.cfg.expression.literal;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import soottocfg.cfg.SourceLocation;
import soottocfg.cfg.expression.Expression;
import soottocfg.cfg.expression.IdentifierExpression;
import soottocfg.cfg.type.IntType;
import soottocfg.cfg.type.Type;
import soottocfg.cfg.variable.Variable;
/**
* @author schaef
*
*/
public class IntegerLiteral extends Expression implements Literal{
private static final long serialVersionUID = 7913206010686231183L;
private final Long value;
private static final IntegerLiteral one = new IntegerLiteral(null, 1);
private static final IntegerLiteral zero = new IntegerLiteral(null, 0);
private static final IntegerLiteral minusOne = new IntegerLiteral(null, -1);
public static IntegerLiteral one() {
return one;
}
public static IntegerLiteral zero() {
return zero;
}
public static IntegerLiteral minusOne() {
return minusOne;
}
public IntegerLiteral(SourceLocation loc, int value) {
super(loc);
this.value = Long.valueOf(value);
}
public IntegerLiteral(SourceLocation loc, long value) {
super(loc);
this.value = value;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(value);
return sb.toString();
}
@Override
public Set<IdentifierExpression> getUseIdentifierExpressions() {
return new HashSet<IdentifierExpression>();
}
@Override
public Set<Variable> getDefVariables() {
// because this can't happen on the left.
Set<Variable> used = new HashSet<Variable>();
return used;
}
public Long getValue() {
return value;
}
@Override
public Type getType() {
return IntType.instance();
}
@Override
public boolean equals(Object other) {
if (other instanceof IntegerLiteral) {
return ((IntegerLiteral) other).getValue().equals(this.value);
}
return false;
}
@Override
public int hashCode() {
return value.hashCode();
}
@Override
public Expression deepCopy() {
return new IntegerLiteral(getSourceLocation(), value);
}
@Override
public Expression substitute(Map<Variable, Variable> subs) {
return this.deepCopy();
}
@Override
public Expression substituteVarWithExpression(Map<Variable, Expression> subs) {
return this.deepCopy();
}
}