/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package datapath.graph.operations;
import datapath.graph.Graph;
import datapath.graph.OperationVisitor;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
/**
*
* @author jh
*/
public class Mux extends AryOperation {
@Override
public String getDisplayLabel() {
return "MUX " + debugMessage;
}
@Override
public void addOperand(Operation op) {
assert op instanceof Predication : "Only Predication allowed as inputs of mux";
super.addOperand(op);
}
@Override
public Set<Operation> dependsOnOperations(boolean includeBackedges) {
HashSet<Operation> ops = new HashSet<Operation>();
for (Operation op : operands) {
Predication p = (Predication) op;
if(!includeBackedges && Graph.isBackEdge(op, this))
continue;
//ops.addAll(p.dependsOnOperations(false));
ops.add(p);
}
return ops;
}
private Iterator<Operation> outputBitsizeIter = null;
@Override
public int getOutputBitsize() {
if(getType() != null)
return getType().getBitsize();
if(operands.size() == 0)
return -1;
if(outputBitsizeIter == null) {
outputBitsizeIter = operands.iterator();
}
int Bitsize = -1;
if(outputBitsizeIter.hasNext()){
Bitsize = outputBitsizeIter.next().getOutputBitsize();
}
outputBitsizeIter = null;
return Bitsize;
}
@Override
public void visit(OperationVisitor visitor) {
visitor.visit(this);
}
}