diff --git a/AlgebraicDataflowArchitectureModel/src/algorithm/DataStorageNecessity.java b/AlgebraicDataflowArchitectureModel/src/algorithm/DataStorageNecessity.java index 9f72b5f..5a6a8d1 100644 --- a/AlgebraicDataflowArchitectureModel/src/algorithm/DataStorageNecessity.java +++ b/AlgebraicDataflowArchitectureModel/src/algorithm/DataStorageNecessity.java @@ -10,16 +10,18 @@ ResourceDependencyGraph graph = model.getResourceDependencyGraph(); DataConstraintModel dcmodel = (DataConstraintModel) model; for (ChannelGenerator generator : dcmodel.getChannelGenerators()) { + boolean flag = false; 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()) { + } + for (Node node : graph.getNodes()) { + for (ChannelMember member : generator.getChannelMembers()) { if (((ResourceNode) node).getIdentifierTemplate().equals(member.getIdentifierTemplate())) { StoreAttribute store = new StoreAttribute(); store.setNeeded(flag); @@ -29,7 +31,11 @@ } } for (Node node : graph.getNodes()) { - if (((ResourceNode) node).getAttribute() == null) { + if (((ResourceNode) node).getPredecessors().size() > 1) { + StoreAttribute store = new StoreAttribute(); + store.setNeeded(true); + ((ResourceNode) node).setAttribute(store); + } else if (((ResourceNode) node).getAttribute() == null) { StoreAttribute store = new StoreAttribute(); store.setNeeded(false); ((ResourceNode) node).setAttribute(store);