/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package datapath.graph.operations;
import datapath.graph.OperationVisitor;
import java.util.HashSet;
import java.util.Set;
/**
*
* @author jh
*/
public abstract class UnaryOperation extends Operation {
private Operation data = null;
public void setData(Operation op){
removeData();
data = op;
op.addUse(this);
}
public void removeData() {
if(data != null){
data.removeUse(this);
data = null;
}
}
public Operation getData() {
return data;
}
@Override
public void replace(Operation oldOp, Operation newOp) {
assert oldOp == data;
removeData();
setData(newOp);
}
@Override
public Set<Operation> dependsOnOperations(boolean includeBackedges) {
HashSet<Operation> ops = new HashSet<Operation>();
assert data != null: this.getClass() + "has no data set";
ops.add(data);
return ops;
}
public void visit(OperationVisitor visitor) {
visitor.visit(this);
}
}