From c8fcb752fd074a05f6242942ca29755d1cb61f89 Mon Sep 17 00:00:00 2001 From: Daniel Knorreck <daniel.knorreck@telecom-paristech.fr> Date: Thu, 10 Mar 2011 17:50:18 +0000 Subject: [PATCH] TEPE generator bugfix --- .../tomappingsystemc2/SystemCTEPE.java | 155 +++++++++++++----- 1 file changed, 113 insertions(+), 42 deletions(-) diff --git a/src/tmltranslator/tomappingsystemc2/SystemCTEPE.java b/src/tmltranslator/tomappingsystemc2/SystemCTEPE.java index 541f08ea15..9acb341c1d 100644 --- a/src/tmltranslator/tomappingsystemc2/SystemCTEPE.java +++ b/src/tmltranslator/tomappingsystemc2/SystemCTEPE.java @@ -90,6 +90,7 @@ public class SystemCTEPE { else _code+= "array(" + _nbOfFloatingSig + _floatingSigComp + "),array(" + _nbOfFloatingSig + _floatingSigProc + ")"; _code += "," + _nbOfStartNodes + ",array(" + _nbOfStartNodes + _floatingEnaComp + "))" + SCCR; + _code += "setTEPEEntryPoint(flListener);\n"; //_code += "SignalConstraint* opMapping[] = {0" + _floatingSigComp + "}"+SCCR; //_code += "NtfSigFuncPointer fnMapping[] = {0" + _floatingSigProc + "}" + SCCR; //_code += "PropertyConstraint* startNodes[] ={0" + _floatingEnaComp + "}" + SCCR; @@ -118,8 +119,37 @@ public class SystemCTEPE { return "_" + Conversion.replaceAllChar(currComp.getName(),' ',"") + currComp.getID(); } + private String[] getExprIDTskvarStrings(TEPEComponent currComp, String initExpr){ + String[] resultStr = new String[3]; + for(int i=0; i<3; i++) + resultStr[i]=""; + LinkedList<String> addTokenList = new LinkedList<String>(); + ArrayList<String> addTskVarList = new ArrayList<String>(); + HashSet<Integer> addCmdIDList = new HashSet<Integer>(); + parseExprToTokenList(initExpr, addTokenList); + if (currComp instanceof TEPEAttributeComponent){ + generateTEPEProp(currComp, addTokenList, addTskVarList, addCmdIDList); + }else{ + for(TEPEComponent linkedComps: currComp.getInAttributes()){ + generateTEPEProp(linkedComps, addTokenList, addTskVarList, addCmdIDList); + } + } + for(String anAddString: addTokenList){ + resultStr[0] += anAddString; + } + resultStr[1] += "array(" + addCmdIDList.size(); + for(Integer id: addCmdIDList){ + resultStr[1]+= ",(ID)" + id.toString(); + } + resultStr[1] += ")," + addCmdIDList.size() ; + resultStr[2] += "array(" + addTskVarList.size(); + for(String anAddTskVar: addTskVarList) + resultStr[2] += "," + anAddTskVar; + resultStr[2] += ")"; + return resultStr; + } - private String connectOutSignals(TEPEComponent currComp, int maxNoOfSig, int maxNoOfNegSig){ + private String connectOutSignals(TEPEComponent currComp, int maxNoOfInSig, int maxNoOfNegInSig){ String connect=""; if (currComp.hasOutSignalComponents()){ for(TEPEComponent outCmp: currComp.getOutSignals()){ @@ -129,16 +159,18 @@ public class SystemCTEPE { } }else System.out.println(getTEPECompName(currComp) + " has no out signal components"); + + //connect floating in Signal Components int noOfSig= (currComp.hasInSignalComponents())? currComp.getInSignals().size():0; System.out.println(getTEPECompName(currComp) + " Number of sig: " + noOfSig); - for(int i=noOfSig+1; i<=maxNoOfSig; i++){ + for(int i=noOfSig+1; i<=maxNoOfInSig; i++){ _floatingSigProc += ",&SignalConstraint::notifyS" + i; _floatingSigComp += ",(SignalConstraint*)" + getTEPECompName(currComp); _nbOfFloatingSig++; } noOfSig= (currComp.hasInNegatedSignalComponents())? currComp.getInNegatedSignals().size():0; System.out.println(getTEPECompName(currComp) + " Number of neg sig: " + noOfSig); - for(int i=noOfSig; i<maxNoOfNegSig; i++){ + for(int i=noOfSig; i<maxNoOfNegInSig; i++){ _floatingSigProc += ",&SignalConstraint::notifySf"; _floatingSigComp += ",(SignalConstraint*)" + getTEPECompName(currComp); _nbOfFloatingSig++; @@ -148,10 +180,13 @@ public class SystemCTEPE { private String connectOutProperties(TEPEComponent currComp){ String connect=""; - if (currComp.hasInPropertyComponents()){ + if (currComp.hasInPropertyComponents()){ + connect += getTEPECompName(currComp) + "->connectEnaOut(array(" + currComp.getInProperties().size(); for(TEPEComponent outCmp: currComp.getInProperties()){ - connect += getTEPECompName(currComp) + "->connectEnaOut(array(1,(PropertyConstraint*)" + getTEPECompName(outCmp) + "),1)" + SCCR; + //connect += getTEPECompName(currComp) + "->connectEnaOut(array(1,(PropertyConstraint*)" + getTEPECompName(outCmp) + "),1)" + SCCR; + connect += ",(PropertyConstraint*)" + getTEPECompName(outCmp); } + connect += ")," + currComp.getInProperties().size() + ")" + SCCR; }else System.out.println(getTEPECompName(currComp) + " has no out properties.\n"); if (!currComp.hasOutPropertyComponents()){ @@ -176,7 +211,6 @@ public class SystemCTEPE { } private void replaceTokenInList(LinkedList<String> iList, String iReplace, String iAdd){ - //for(TEPEComponent outCmp: currComp.getInProperties()){ iReplace = iReplace.trim(); ListIterator itr = iList.listIterator(); LinkedList<String> addTokenList= new LinkedList<String>(); @@ -201,13 +235,39 @@ public class SystemCTEPE { }while(itr.hasNext()); } + private String getSignalsForListener(TEPEComponent currComp){ + String result= currComp.getOutSignals().size() + ",array(" + currComp.getOutSignals().size(); + String aDstFuncs=""; + for (TEPEComponent aDstCmp: currComp.getOutSignals()){ + int index = aDstCmp.getInSignals().indexOf(currComp); + String suffix = (index==-1)? "f": ""+(index+1); + result += ",(SignalConstraint*)" + getTEPECompName(aDstCmp); + aDstFuncs += ",(NtfSigFuncPointer)&SignalConstraint::notifyS" + suffix; + } + result += "),array(" + currComp.getOutSignals().size() + aDstFuncs + ")"; + return result; + } + private void generateTEPEProp(TEPEComponent currComp, LinkedList<String> iTokenList, ArrayList<String> iTskVarList, HashSet<Integer> iCmdIDList){ - //labc.connectEnaOut(array(1, (PropertyConstraint*)&seqc1),1); - //void connectSigOut(SignalConstraint* iRightConstr, NtfSigFuncPointer iNotFunc){ + + if (!(currComp instanceof TEPEPropertyComponent || currComp.hasOutAttributeComponents() || currComp.hasOutSignalComponents() || currComp.hasOutPropertyComponents())) return; + String cmpName = getTEPECompName(currComp); if(currComp instanceof TEPEAttributeComponent){ - if (iTokenList!=null){ + if (iTokenList==null){ + if (currComp.hasOutSignalComponents()){ + String[] decomp = getExprIDTskvarStrings(currComp, currComp.getValue()); + _eqFuncDecl+= "ParamType " + cmpName + "_func(ParamType** iVar);\n"; + _eqFuncs += "ParamType " + cmpName + "_func(ParamType** iVar){\n return " + decomp[0]; + _eqFuncs += ";\n}\n\n"; + _listeners+= "TEPESettingListener* " + cmpName + "_listener = new TEPESettingListener(" + decomp[1] + "," + decomp[2]; + _listeners+= ",&" + cmpName + "_func" + "," + getSignalsForListener(currComp); + _listeners+= ",this,_simulator)" + SCCR; + _listeners+= "addTEPEListener((GeneralListener*)" + cmpName + "_listener);\n"; + } + + }else{ //replaceTokenInList(iTokenList, currComp.getValue(), ((TEPEAttributeComponent)currComp).getBlockName() + "x" + currComp.getValue()); replaceTokenInList(iTokenList, currComp.getValue(), "*iVar[" + iTskVarList.size() + "]"); //iTskVarList.add( "&task__" + ((TEPEAttributeComponent)currComp).getBlockName() + "->" + currComp.getValue()); @@ -228,36 +288,36 @@ public class SystemCTEPE { _connect += connectOutSignals(currComp,2,0); }else if (currComp instanceof TEPEEquationComponent){ - //EqConstraint(PropType iType, bool iIncludeBounds) - //TEPEEquationListener::TEPEEquationListener(ID* iSubjectIDs, unsigned int iNbOfSubjectIDs, ParamType** iVar, EqFuncPointer iEqFunc, SignalConstraint* iNotifConstr, NtfSigFuncPointer iNotifFunc, SimComponents* iSimComp, ListenerSubject<GeneralListener>* iSimulator) - LinkedList<String> addTokenList = new LinkedList<String>(); + /*LinkedList<String> addTokenList = new LinkedList<String>(); ArrayList<String> addTskVarList = new ArrayList<String>(); HashSet<Integer> addCmdIDList = new HashSet<Integer>(); parseExprToTokenList(currComp.getValue(), addTokenList); for(TEPEComponent linkedComps: currComp.getInAttributes()){ System.out.println("%%%%%%%%%%% in Attribute"); generateTEPEProp(linkedComps, addTokenList, addTskVarList, addCmdIDList); - } + }*/ + String[] decomp = getExprIDTskvarStrings(currComp, currComp.getValue()); _declare+= "EqConstraint* " + cmpName + " = new EqConstraint(" + currComp.getID() + ",GENERAL,true)" + SCCR; - _declare += "addTEPEConstraint(" + cmpName + ");\n"; - System.out.print(cmpName + "transformed to: "); + //System.out.print(cmpName + "transformed to: "); _eqFuncDecl+= "bool " + cmpName + "_func(ParamType** iVar);\n"; - _eqFuncs += "bool " + cmpName + "_func(ParamType** iVar){\n return "; - for(String anAddString: addTokenList){ + _eqFuncs += "bool " + cmpName + "_func(ParamType** iVar){\n return " + decomp[0]; + /*for(String anAddString: addTokenList){ System.out.print(anAddString); _eqFuncs += anAddString; } - System.out.println(); + System.out.println();*/ _eqFuncs += ";\n}\n\n"; - _listeners+= "TEPEEquationListener* " + cmpName + "_listener = new TEPEEquationListener(" + "array(" + addCmdIDList.size(); + _listeners+= "TEPEEquationListener* " + cmpName + "_listener = new TEPEEquationListener(" + decomp[1] + "," + decomp[2]; + /*"array(" + addCmdIDList.size(); for(Integer id: addCmdIDList){ _listeners+= ",(ID)" + id.toString(); - } - _listeners+= ")," + addCmdIDList.size() + "," + "array(" + addTskVarList.size(); + } _listeners+= ")," + addCmdIDList.size() + "," + "array(" + addTskVarList.size(); for(String anAddTskVar: addTskVarList) - _listeners+= "," + anAddTskVar; - _listeners+= "),&" + cmpName + "_func" + "," + cmpName + ",&SignalConstraint::notifyS1,this, _simulator)" + SCCR; + _listeners+= "," + anAddTskVar;*/ + _listeners+= ",&" + cmpName + "_func" + "," + cmpName + ",&SignalConstraint::notifyS1,this, _simulator)" + SCCR; + _connect += connectOutSignals(currComp,0,0); _connect += connectOutProperties(currComp); + _listeners+= "addTEPEListener((GeneralListener*)" + cmpName + "_listener);\n"; }else if (currComp instanceof TEPELogicalConstraintComponent){ //LogConstraint(PropType iType, bool iIncludeBounds) @@ -267,7 +327,7 @@ public class SystemCTEPE { }else{ _declare += "LogConstraint* " + cmpName + " = new LogConstraint("+ currComp.getID() + ",GENERAL,true)" + SCCR; } - _declare += "addTEPEConstraint(" + cmpName + ");\n"; + //_declare += "addTEPEConstraint(" + cmpName + ");\n"; _connect += connectOutSignals(currComp,2,1); _connect += connectOutProperties(currComp); @@ -285,7 +345,7 @@ public class SystemCTEPE { _declare += "NREACHABILITY"; } _declare += ")" + SCCR; - _declare += "addTEPEConstraint(" + cmpName + ");\n"; + //_declare += "addTEPEConstraint(" + cmpName + ");\n"; _connect += connectOutProperties(currComp); }else if (currComp instanceof TEPEPropertyOperatorComponent){ @@ -299,21 +359,33 @@ public class SystemCTEPE { } _declare += ")" + SCCR; //_connect += connectOutSignals(currComp); - _declare += "addTEPEConstraint(" + cmpName + ");\n"; + //_declare += "addTEPEConstraint(" + cmpName + ");\n"; _connect += connectOutProperties(currComp); }else if (currComp instanceof TEPESettingComponent){ //Variable Setting - if (iTokenList!=null){ + //TEPESettingListener::TEPESettingListener(ID* iSubjectIDs, unsigned int iNbOfSubjectIDs, ParamType** iVar, SettingFuncPointer iSetFunc, unsigned int inbOfSignals, SignalConstraint** iNotifConstr, NtfSigFuncPointer* iNotifFunc, SimComponents* iSimComp, ListenerSubject<GeneralListener>* iSimulator); + if (iTokenList==null){ + if (currComp.hasOutSignalComponents()){ + String[] decomp = getExprIDTskvarStrings(currComp, currComp.getValue().split("=",2)[1]); + _eqFuncDecl+= "ParamType " + cmpName + "_func(ParamType** iVar);\n"; + _eqFuncs += "ParamType " + cmpName + "_func(ParamType** iVar){\n return " + decomp[0]; + _eqFuncs += ";\n}\n\n"; + _listeners+= "TEPESettingListener* " + cmpName + "_listener = new TEPESettingListener(" + decomp[1] + "," + decomp[2]; + _listeners+= ",&" + cmpName + "_func" + "," + getSignalsForListener(currComp); + _listeners+= ",this,_simulator)" + SCCR; + _listeners+= "addTEPEListener((GeneralListener*)" + cmpName + "_listener);\n"; + } + }else{ String[] lhsrhs = currComp.getValue().split("=",2); - System.out.println("Replace " + lhsrhs[0] + " by " + lhsrhs[1] + " before: "); + //System.out.println("Replace " + lhsrhs[0] + " by " + lhsrhs[1] + " before: "); for(String aToken: iTokenList) System.out.print(aToken + ", "); - System.out.println("\nafter:"); + //System.out.println("\nafter:"); replaceTokenInList(iTokenList, lhsrhs[0], lhsrhs[1]); - for(String aToken: iTokenList) + /*for(String aToken: iTokenList) System.out.print(aToken + ", "); - System.out.println(""); + System.out.println("");*/ for(TEPEComponent linkedComps: currComp.getInAttributes()) generateTEPEProp(linkedComps, iTokenList, iTskVarList, iCmdIDList); } @@ -332,7 +404,7 @@ public class SystemCTEPE { String[] aTransTypes = aTokens[2].split("_"); String[] aEvtDescriptor = {"SIMSTART", "SIMEND", "TIMEADV", "TASKSTART", "TASKEND", "CMDRUNNABLE", "CMDSTART", "CMDEND", "TRANSEXEC"}; String[] aTransDescriptor = {"NONE", "EXE", "RD", "WR", "SEL", "SND", "REQ", "WAIT", "NOTIF", "ACT", "CHO", "RND", "STP"}; - _listeners+= "TEPESigListener* " + cmpName + "= new TEPESigListener(array(" + (aSrcIDs.length-1); + _listeners+= "TEPESigListener* " + cmpName + "_listener= new TEPESigListener(array(" + (aSrcIDs.length-1); for(int i=1; i<aSrcIDs.length; i++) _listeners+= ",(ID)" + aSrcIDs[i]; _listeners+= ")," + (aSrcIDs.length-1) + ","; @@ -348,12 +420,8 @@ public class SystemCTEPE { } } - _listeners+= aEvtCode + "," + aTransCode + ","; - _listeners+= currComp.getOutSignals().size() + ",array(" + currComp.getOutSignals().size(); - /*int index = currComp.getOutSignals().get(0).getInSignals().indexOf(currComp); - String suffix = (index==-1)? "f": ""+(index+1); - _listeners += getTEPECompName(currComp.getOutSignals().get(0)) + ","; - _listeners += "&SignalConstraint::notifyS" + suffix + ",this, _simulator)" + SCCR;*/ + _listeners+= aEvtCode + "," + aTransCode + "," + getSignalsForListener(currComp); + /*_listeners+= currComp.getOutSignals().size() + ",array(" + currComp.getOutSignals().size(); String aDstFuncs=""; for (TEPEComponent aDstCmp: currComp.getOutSignals()){ int index = aDstCmp.getInSignals().indexOf(currComp); @@ -361,7 +429,9 @@ public class SystemCTEPE { _listeners += ",(SignalConstraint*)" + getTEPECompName(aDstCmp); aDstFuncs += ",(NtfSigFuncPointer)&SignalConstraint::notifyS" + suffix; } - _listeners += "),array(" + currComp.getOutSignals().size() + aDstFuncs + "),this, _simulator)" + SCCR; + _listeners += "),array(" + currComp.getOutSignals().size() + aDstFuncs + ")*/ + _listeners += ",this, _simulator)" + SCCR; + _listeners+= "addTEPEListener((GeneralListener*)" + cmpName + "_listener);\n"; } }else if (currComp instanceof TEPETimeConstraintComponent){ @@ -369,13 +439,14 @@ public class SystemCTEPE { //TimeTConstraint(TMLTime iT, bool iRetrigger, bool iIncludeBounds) TEPETimeConstraintComponent timeConstr = (TEPETimeConstraintComponent)currComp; if (currComp.getInSignals().size()>1){ - _declare += "TimeMMConstraint* " + cmpName + " = new TimeMMConstraint("+ currComp.getID() + ",GENERAL, " + timeConstr.getMinTime() + "," + timeConstr.getMaxTime() + ",false,true)" + SCCR; + String[] minMaxValues = timeConstr.getValue().split(",",2); + _declare += "TimeMMConstraint* " + cmpName + " = new TimeMMConstraint("+ currComp.getID() + ",GENERAL, " + minMaxValues[0] + "," + minMaxValues[1] + ",false,true)" + SCCR; _connect += connectOutSignals(currComp,2,0); }else{ - _declare += "TimeTConstraint* " + cmpName + " = new TimeTConstraint(" + currComp.getID() + "," + timeConstr.getMinTime() + ",false,true)" + SCCR; + _declare += "TimeTConstraint* " + cmpName + " = new TimeTConstraint(" + currComp.getID() + "," + timeConstr.getValue() + ",false,true)" + SCCR; _connect += connectOutSignals(currComp,1,0); } - _declare += "addTEPEConstraint(" + cmpName + ");\n"; + //_declare += "addTEPEConstraint(" + cmpName + ");\n"; _connect += connectOutProperties(currComp); } } -- GitLab