package algorithm;
import models.*;
import models.algebra.*;
import models.dataConstraintModel.*;
import models.dataFlowModel.*;
public class DataStorageNecessity {
static public ResourceDependencyGraph run(DataFlowModel model) {
ResourceDependencyGraph graph = model.getResourceDependencyGraph();
DataConstraintModel dcmodel = (DataConstraintModel) model;
for (ChannelGenerator generator : dcmodel.getChannelGenerators()) {
for (ChannelMember member : ((DataflowChannelGenerator) generator).getOutputChannelMembers()) {
Expression curexp = member.getStateTransition().getCurStateExpression();
Expression nextexp = member.getStateTransition().getNextStateExpression();
boolean flag = false;
for (Position pos : curexp.getVariables().keySet()) {
if (nextexp.contains(curexp.getVariables().get(pos))) {
flag = true;
}
}
for (Node node : graph.getNodes()) {
if (((ResourceNode) node).getIdentifierTemplate().equals(member.getIdentifierTemplate())) {
StoreAttribute store = new StoreAttribute();
store.setNeeded(flag);
((ResourceNode) node).setAttribute(store);
}
}
}
}
for (Node node : graph.getNodes()) {
if (((ResourceNode) node).getAttribute() == null) {
StoreAttribute store = new StoreAttribute();
store.setNeeded(false);
((ResourceNode) node).setAttribute(store);
}
}
return graph;
}
}