diff --git a/AlgebraicDataflowArchitectureModel/src/algorithm/CodeGenerator.java b/AlgebraicDataflowArchitectureModel/src/algorithm/CodeGenerator.java index a3077a6..56a18ff 100644 --- a/AlgebraicDataflowArchitectureModel/src/algorithm/CodeGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/algorithm/CodeGenerator.java @@ -10,9 +10,11 @@ import models.algebra.ParameterizedIdentifierIsFutureWork; import models.algebra.Symbol; import models.algebra.Term; +import models.algebra.Type; import models.algebra.UnificationFailed; import models.algebra.ValueUndefined; import models.dataConstraintModel.ChannelMember; +import models.dataConstraintModel.DataConstraintModel; import models.dataConstraintModel.IdentifierTemplate; import models.dataFlowModel.*; import models.dataFlowModel.DataflowChannelGenerator.IResourceStateAccessor; @@ -24,21 +26,21 @@ @Override public Expression getCurrentStateAccessorFor(IdentifierTemplate target, IdentifierTemplate from) { if (target.equals(from)) { - return new Field(target.getResourceName(), target.getResourceStateType()); + return new Field(target.getResourceName(), target.getResourceStateType() != null ? target.getResourceStateType() : DataConstraintModel.typeInt); } return null; } @Override public Expression getNextStateAccessorFor(IdentifierTemplate target, IdentifierTemplate from) { - return new Parameter(target.getResourceName(), target.getResourceStateType()); + return new Parameter(target.getResourceName(), target.getResourceStateType() != null ? target.getResourceStateType() : DataConstraintModel.typeInt); } }; IResourceStateAccessor pullAccessor = new IResourceStateAccessor() { @Override public Expression getCurrentStateAccessorFor(IdentifierTemplate target, IdentifierTemplate from) { if (target.equals(from)) { - return new Field(target.getResourceName(), target.getResourceStateType()); + return new Field(target.getResourceName(), target.getResourceStateType() != null ? target.getResourceStateType() : DataConstraintModel.typeInt); } return null; } @@ -71,14 +73,47 @@ codes.add("public class " + resource.getIdentifierTemplate().getResourceName().substring(0, 1).toUpperCase() + resource.getIdentifierTemplate().getResourceName().substring(1) + " {"); if (((StoreAttribute) resource.getAttribute()).isStored()) { + for (Edge e : resource.getInEdges()) { + ResourceDependency re = (ResourceDependency) e; + for(ChannelMember cm:re.getChannelGenerator().getChannelMembers()) { + try { + Expression exp = re.getChannelGenerator().deriveUpdateExpressionOf(cm, pushAccessor); + if(exp != null) { + Parameter param = exp.getSubTerms(Parameter.class).values().iterator().next(); + codes.add("\t" + "void update(" + param.getType().getImplementastionTypeName() + " " + param.toImplementation() + "){"); + tmp = "\t\t" + exp.toImplementation(); + codes.add(tmp); + codes.add("\t" + "}"); + } + } catch (ParameterizedIdentifierIsFutureWork e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } catch (ResolvingMultipleDefinitionIsFutureWork e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } catch (InvalidMessage e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } catch (UnificationFailed e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } catch (ValueUndefined e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + } + } for (Edge e : resource.getOutEdges()) { ResourceDependency re = (ResourceDependency) e; for(ChannelMember cm:re.getChannelGenerator().getChannelMembers()) { try { Expression exp = re.getChannelGenerator().deriveUpdateExpressionOf(cm, pushAccessor); if(exp != null) { - tmp = "\t" + exp.toImplementation(); + Parameter param = exp.getSubTerms(Parameter.class).values().iterator().next(); + codes.add("\t" + "void update(" + param.getType().getImplementastionTypeName() + " " + param.toImplementation() + "){"); + tmp = "\t\t" + exp.toImplementation(); codes.add(tmp); + codes.add("\t" + "}"); } } catch (ParameterizedIdentifierIsFutureWork e1) { // TODO Auto-generated catch block @@ -105,6 +140,34 @@ try { Expression exp = re.getChannelGenerator().deriveUpdateExpressionOf(cm, pullAccessor); if(exp != null) { + tmp = "\t" + "return " + exp.toImplementation(); + codes.add(tmp); + } + } catch (ParameterizedIdentifierIsFutureWork e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } catch (ResolvingMultipleDefinitionIsFutureWork e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } catch (InvalidMessage e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } catch (UnificationFailed e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } catch (ValueUndefined e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + } + } + for (Edge e : resource.getOutEdges()) { + ResourceDependency re = (ResourceDependency) e; + for(ChannelMember cm:re.getChannelGenerator().getChannelMembers()) { + try { + Expression exp = re.getChannelGenerator().deriveUpdateExpressionOf(cm, pullAccessor); + if(exp != null) { + tmp = "\t" + "return " + exp.toImplementation(); tmp = "\t" + exp.toImplementation(); codes.add(tmp); }