| | package algorithms; |
---|
| | |
---|
| | import java.util.Collection; |
---|
| | import java.util.HashSet; |
---|
| | |
---|
| | import models.*; |
---|
| | import models.algebra.*; |
---|
| |
---|
| | |
---|
| | public class NecessityOfStoringResourceStates { |
---|
| | static public ResourceDependencyGraph doDecide(DataFlowModel model) { |
---|
| | ResourceDependencyGraph graph = model.getResourceDependencyGraph(); |
---|
| | DataConstraintModel dcmodel = (DataConstraintModel) model; |
---|
| | for (ChannelGenerator generator : dcmodel.getChannelGenerators()) { |
---|
| | boolean flag = false; |
---|
| | for (ChannelMember member : ((DataflowChannelGenerator) generator).getOutputChannelMembers()) { |
---|
| | Collection<ChannelGenerator> channels = new HashSet<>(model.getIOChannelGenerators()); |
---|
| | channels.addAll(model.getChannelGenerators()); |
---|
| | for (ChannelGenerator generator: channels) { |
---|
| | for (ChannelMember member: ((DataflowChannelGenerator) generator).getOutputChannelMembers()) { |
---|
| | boolean flag = false; |
---|
| | Expression curexp = member.getStateTransition().getCurStateExpression(); |
---|
| | Expression nextexp = member.getStateTransition().getNextStateExpression(); |
---|
| | for (Position pos : curexp.getVariables().keySet()) { |
---|
| | if (nextexp.contains(curexp.getVariables().get(pos))) { |
---|
| | flag = true; |
---|
| | break; |
---|
| | } |
---|
| | } |
---|
| | } |
---|
| | for (Node node : graph.getNodes()) { |
---|
| | for (ChannelMember member : generator.getChannelMembers()) { |
---|
| | for (Node node : graph.getNodes()) { |
---|
| | if (((ResourceNode) node).getIdentifierTemplate().equals(member.getIdentifierTemplate())) { |
---|
| | setStoreAttribute(flag, (ResourceNode) node); |
---|
| | } |
---|
| | } |
---|
| | } |
---|
| | } |
---|
| | for (Node node : graph.getNodes()) { |
---|
| | HashSet<ChannelGenerator> channels = new HashSet<>(); |
---|
| | HashSet<ChannelGenerator> inChannels = new HashSet<>(); |
---|
| | for(Edge pre : ((ResourceNode) node).getInEdges()) { |
---|
| | channels.add(((ResourceDependency) pre).getChannelGenerator()); |
---|
| | inChannels.add(((ResourceDependency) pre).getChannelGenerator()); |
---|
| | } |
---|
| | if ((channels.size() > 1)) { |
---|
| | if ((inChannels.size() > 1)) { |
---|
| | setStoreAttribute(true, (ResourceNode) node); |
---|
| | } else if (((ResourceNode) node).getAttribute() == null) { |
---|
| | setStoreAttribute(false, (ResourceNode) node); |
---|
| | } |
---|
| |
---|
| | |