CommonMPIContractAbsentEventNode.java
package edu.udel.cis.vsl.abc.ast.node.common.acsl;
import edu.udel.cis.vsl.abc.ast.node.IF.acsl.MPIContractAbsentEventNode;
import edu.udel.cis.vsl.abc.ast.node.IF.expression.ExpressionNode;
import edu.udel.cis.vsl.abc.err.IF.ABCRuntimeException;
import edu.udel.cis.vsl.abc.token.IF.Source;
import java.io.PrintStream;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
public class CommonMPIContractAbsentEventNode extends CommonMPIContractExpressionNode
implements MPIContractAbsentEventNode {
private MPIAbsentEventKind kind;
public CommonMPIContractAbsentEventNode(Source source,
MPIAbsentEventKind kind,
List<ExpressionNode> args) {
super(source, args, MPIContractExpressionKind.MPI_ABSENT_EVENT,
"\\absent_event");
this.kind = kind;
}
@Override
public MPIAbsentEventKind absentEventKind() {
return kind;
}
@Override
public ExpressionNode[] arguments() {
ExpressionNode[] args = new ExpressionNode[numChildren()];
for (int i = 0; i < args.length; i++)
args[i] = getArgument(i);
return args;
}
@Override
public MPIContractAbsentEventNode copy() {
List<ExpressionNode> args = new LinkedList<>();
int numArgs = numArguments();
for (int i = 0; i < numArgs; i++)
args.add(duplicate(getArgument(i)));
return new CommonMPIContractAbsentEventNode(getSource(), kind, args);
}
@Override
public boolean isSideEffectFree(boolean errorsAreSideEffects) {
return true;
}
@Override
protected void printBody(PrintStream out) {
out.print(toString());
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
switch (kind) {
case SENDTO:
sb.append("\\sendto");
break;
case SENDFROM:
sb.append("\\sendfrom");
break;
case ENTER:
sb.append("\\enter");
break;
case EXIT:
sb.append("\\exit");
break;
default:
throw new ABCRuntimeException("unknown MPI absent event kind " +
kind);
}
sb.append("(");
int numArgs = this.numArguments();
for (int i = 0; i < numArgs; i++) {
sb.append(getArgument(i).prettyRepresentation());
if (i < numArgs - 1)
sb.append(", ");
}
sb.append(")");
return sb.toString();
}
@Override
public boolean equals(Object obj) {
if (obj instanceof MPIContractAbsentEventNode) {
MPIContractAbsentEventNode other = (MPIContractAbsentEventNode) obj;
if (other.absentEventKind() != absentEventKind())
return false;
return Arrays.equals(this.arguments(), other.arguments());
}
return false;
}
}