diff --git a/AlgebraicDataflowArchitectureModel/src/algorithm/DataStorageNecessity.java b/AlgebraicDataflowArchitectureModel/src/algorithm/DataStorageNecessity.java index cfd38d0..0625664 100644 --- a/AlgebraicDataflowArchitectureModel/src/algorithm/DataStorageNecessity.java +++ b/AlgebraicDataflowArchitectureModel/src/algorithm/DataStorageNecessity.java @@ -7,27 +7,30 @@ 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()) { + for (ChannelMember member : ((DataflowChannelGenerator) generator).getOutputChannelMembers()) { Expression curexp = member.getStateTransition().getCurStateExpression(); Expression nextexp = member.getStateTransition().getNextStateExpression(); - for (Position pos : nextexp.getVariables().keySet()) { + boolean flag = false; + for (Position pos : curexp.getVariables().keySet()) { System.out.println(curexp); System.out.println(nextexp.getVariables().containsKey(pos)); System.out.println(nextexp); - if(nextexp.getVariables().get(pos).contains(curexp)) { - for(Node node:model.getResourceDependencyGraph().getNodes()) { - if(((ResourceNode)node).getIdentifierTemplate().equals(member.getIdentifierTemplate())){ - StoreAttribute store = new StoreAttribute(); - store.setNeeded(true); - ((ResourceNode)node).setAttribute(store); - } - } + 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); } } } } - return model.getResourceDependencyGraph(); + return graph; } } diff --git a/AlgebraicDataflowArchitectureModel/src/tests/DerivingStorageResourcesTest.java b/AlgebraicDataflowArchitectureModel/src/tests/DerivingStorageResourcesTest.java index af5f925..ae31879 100644 --- a/AlgebraicDataflowArchitectureModel/src/tests/DerivingStorageResourcesTest.java +++ b/AlgebraicDataflowArchitectureModel/src/tests/DerivingStorageResourcesTest.java @@ -11,6 +11,7 @@ import algorithm.DataStorageNecessity; import models.Edge; +import models.Node; import models.algebra.InvalidMessage; import models.algebra.ParameterizedIdentifierIsFutureWork; import models.algebra.UnificationFailed; @@ -20,10 +21,7 @@ import models.dataConstraintModel.ChannelSelector; import models.dataConstraintModel.GroupSelector; import models.dataConstraintModel.IdentifierTemplate; -import models.dataFlowModel.DataFlowModel; -import models.dataFlowModel.DataflowChannelGenerator; -import models.dataFlowModel.ResolvingMultipleDefinitionIsFutureWork; -import models.dataFlowModel.ResourceDependencyGraph; +import models.dataFlowModel.*; import parser.ExpectedChannel; import parser.ExpectedChannelName; import parser.ExpectedEquals; @@ -45,11 +43,10 @@ try { model = parser.doParse(); System.out.println(model); - DataStorageNecessity.run(model); - for (ChannelGenerator c: model.getChannelGenerators()) { - for(IdentifierTemplate resource:c.getIdentifierTemplates()) { - System.out.println(resource.getResourceStateType().getTypeName()); - } + ResourceDependencyGraph graph = DataStorageNecessity.run(model); + for (Node n:graph.getNodes()) { + ResourceNode resource = (ResourceNode)n; + System.out.println(((StoreAttribute)resource.getAttribute()).isStored()); } } catch (ExpectedChannel | ExpectedChannelName | ExpectedLeftCurlyBracket | ExpectedInOrOutKeyword | ExpectedStateTransition | ExpectedEquals | ExpectedRHSExpression | WrongLHSExpression