From a5423dc9e904153ce454ae1a91ffd9a176c4742e Mon Sep 17 00:00:00 2001
From: Daniel Knorreck <daniel.knorreck@telecom-paristech.fr>
Date: Tue, 8 Mar 2011 14:45:51 +0000
Subject: [PATCH] TEPE diagram translation added

---
 .../tomappingsystemc2/LiveVariableNode.java   |   8 +
 .../tomappingsystemc2/MappedSystemCTask.java  |   5 +
 .../tomappingsystemc2/StaticAnalysis.java     |  36 ++-
 .../tomappingsystemc2/SystemCTEPE.java        | 247 +++++++++++++++---
 .../tomappingsystemc2/TML2MappingSystemC.java |  84 ++++--
 5 files changed, 315 insertions(+), 65 deletions(-)

diff --git a/src/tmltranslator/tomappingsystemc2/LiveVariableNode.java b/src/tmltranslator/tomappingsystemc2/LiveVariableNode.java
index adb082c5e8..d8d6ba3efe 100755
--- a/src/tmltranslator/tomappingsystemc2/LiveVariableNode.java
+++ b/src/tmltranslator/tomappingsystemc2/LiveVariableNode.java
@@ -11,6 +11,7 @@ public class LiveVariableNode{
 	//** Live Variable Analysis
 	private int[] _useVars;
 	private int[] _defVars;
+	private int[] _initialDefVars;
 	private int[] _inVars;
 	private int[] _outVars;
 	//** Reachable Definition analysis
@@ -54,6 +55,9 @@ public class LiveVariableNode{
 	LiveVariableNode(StaticAnalysis iAnalysis, int[] iUseVars, int[] iDefVars, TMLActivityElement iLinkedElem, LiveVariableNode iSuperiorNode){
 		_useVars=iUseVars;
 		_defVars=iDefVars;
+		_initialDefVars = new int[_defVars.length];
+		for (int i=0; i<_defVars.length; i++)
+			_initialDefVars[i]=_defVars[i];
 		_superiorBranchNode = iSuperiorNode;
 		_linkedElem = iLinkedElem;
 		_analysis = iAnalysis;
@@ -703,6 +707,10 @@ public class LiveVariableNode{
 		return _outDefs;
 	}
 
+	public int[] getInitialDefVars(){
+		return _initialDefVars;
+	}
+
 	private boolean canBeRemoved(){
 		//if ((_lhs==null || _lhs.isEmpty()) && (_rhs==null || _rhs.isEmpty()) && !(_linkedElem==null || _linkedElem instanceof TMLNotifiedEvent || _linkedElem instanceof TMLRandom)) return false;
 		for (int i=0; i<_defVars.length;i++){
diff --git a/src/tmltranslator/tomappingsystemc2/MappedSystemCTask.java b/src/tmltranslator/tomappingsystemc2/MappedSystemCTask.java
index 541c3800e7..afc6c98a0e 100755
--- a/src/tmltranslator/tomappingsystemc2/MappedSystemCTask.java
+++ b/src/tmltranslator/tomappingsystemc2/MappedSystemCTask.java
@@ -276,6 +276,7 @@ public class MappedSystemCTask {
 		// public dec
 		hcode += CR + functionSig + CR + "public:" + CR;
 		hcode += "friend bool condFunc(TMLTask* _ioTask_);\n";
+		hcode += "friend class CurrentComponents;\n";
 		// Simulation
 		hcode += makeConstructorSignature() + SCCR; // + "~" + reference + "()" + SCCR;
 		makeSerializableFuncs();
@@ -953,4 +954,8 @@ public class MappedSystemCTask {
 	public void determineCheckpoints(int[] aStatistics){
 		_analysis.determineCheckpoints(aStatistics);
 	}
+	
+	public StaticAnalysis getAnalysis(){
+		return _analysis;
+	}
 }
diff --git a/src/tmltranslator/tomappingsystemc2/StaticAnalysis.java b/src/tmltranslator/tomappingsystemc2/StaticAnalysis.java
index ed246f552f..7c143b1a14 100644
--- a/src/tmltranslator/tomappingsystemc2/StaticAnalysis.java
+++ b/src/tmltranslator/tomappingsystemc2/StaticAnalysis.java
@@ -6,7 +6,7 @@ import java.util.regex.*;
 //import java.util.HashSet;
 
 public class StaticAnalysis{
-	private ArrayList<LiveVariableNode> liveNodes= new ArrayList<LiveVariableNode>();;
+	private ArrayList<LiveVariableNode> liveNodes= new ArrayList<LiveVariableNode>();
 	private final static Pattern _varPattern = Pattern.compile("[\\w&&\\D]+[\\w]*");
 	private TMLTask _task;
 	private ArrayList<TMLChannel> _channels;
@@ -59,6 +59,7 @@ public class StaticAnalysis{
 	}
 
 	private int getVarSeqNoByName(String attName){
+		attName=attName.trim();
 		int aSeq=0;
 		for(TMLAttribute att: _task.getAttributes()) {
 			if (att.name.equals(attName)) return aSeq;
@@ -285,12 +286,12 @@ public class StaticAnalysis{
 		int aNbOfCheckPoints=0, aNbOfCandidates=0;
 		for(LiveVariableNode aLiveNode: liveNodes){
 			int aStatResult = aLiveNode.varStatistics(aStatistics);
-			//if((aStatResult & 1)!=0){
-				aLiveNode.printReachingEntries();
-				printLiveVarNode(aLiveNode);
+			if((aStatResult & 1)!=0){
+				//aLiveNode.printReachingEntries();
+				//printLiveVarNode(aLiveNode);
 				aNbOfCandidates++;
 				if((aStatResult & 2)!=0) aNbOfCheckPoints++;
-			//}
+			}
 		}
 		if (aNbOfCandidates==0)
 			System.out.println("No checkpoint candidates");
@@ -503,4 +504,29 @@ public class StaticAnalysis{
 			if (aLiveNode.getLinkedElement()==iCmd) return aLiveNode;
 		return null;
 	}
+	
+	public void getCommandsImpactingVar(String iVarName, HashSet<Integer> oList){
+		//int[] aVarMap=new int[_bytesForVars];
+		int aVarSeqNo = getVarSeqNoByName(iVarName);
+		if (aVarSeqNo>=0){
+			//aVarMap[aVarSeqNo >>> 5] |= 1 << (aVarSeqNo & 0x1F);
+			int intPos = aVarSeqNo >>> 5;
+			int bitMask = 1 << (aVarSeqNo & 0x1F);
+			for(LiveVariableNode aLiveNode: liveNodes){
+				/*int[] aDefVars = aLiveNode.getDefVars();
+				boolean aMatchFound=false;
+				for (int i=0; i<aDefVars.length && !aMatchFound;i++){
+					aMatchFound |= ((aDefVars[i] & aVarMap[i]) !=0);
+				}*/
+				
+				//if (aMatchFound && aLiveNode.getLinkedElement()!=null) oList.add(aLiveNode.getLinkedElement().getID());
+				if ((aLiveNode.getInitialDefVars()[intPos] & bitMask)!=0){
+					if (aLiveNode.getLinkedElement()!=null) oList.add(aLiveNode.getLinkedElement().getID());
+					else System.out.println("No linked elem");
+				}else
+					System.out.println("Bit for var not set");
+			}
+		}else
+			System.out.println("Variable " + iVarName + " not found in getCommandsImpactingVar");
+	}
 }
\ No newline at end of file
diff --git a/src/tmltranslator/tomappingsystemc2/SystemCTEPE.java b/src/tmltranslator/tomappingsystemc2/SystemCTEPE.java
index 92196e923c..541f08ea15 100644
--- a/src/tmltranslator/tomappingsystemc2/SystemCTEPE.java
+++ b/src/tmltranslator/tomappingsystemc2/SystemCTEPE.java
@@ -49,6 +49,7 @@ import java.util.*;
 import tmltranslator.*;
 import myutil.*;
 import tepe.*;
+import java.util.regex.*;
 
 
 public class SystemCTEPE {
@@ -59,34 +60,60 @@ public class SystemCTEPE {
 	private final static String EFCR = "}\n";
 	private final static String EFCR2 = "}\n\n";
 	private final static String EF = "}";
+	private final static Pattern _varPattern = Pattern.compile("[\\w&&\\D]+[\\w]*");
 	private ArrayList<TEPE> _tepes;
-	
-	private String _floatingSigProc="", _floatingSigComp="", _floatingEnaComp="", _connect="", _declare="", _evtRegister="", _code="";
+	private int _nbOfFloatingSig=0,_nbOfStartNodes=0;
+	private String _floatingSigProc="", _floatingSigComp="", _floatingEnaComp="", _connect="", _declare="", _evtRegister="", _code="", _listeners="", _eqFuncs="", _eqFuncDecl="";
+	TML2MappingSystemC _tmltranslator;
 
-	public SystemCTEPE(ArrayList<TEPE> tepes){
+	public SystemCTEPE(ArrayList<TEPE> tepes, TML2MappingSystemC tmltranslator){
 		_tepes=tepes;
+		_tmltranslator=tmltranslator;
 	}
 	
 	public void generateTEPEs(){
-		_floatingSigProc=""; _floatingSigComp=""; _floatingEnaComp=""; _connect=""; _declare=""; _evtRegister="";
-		System.out.println("And the TEPEs are...............");
-		for(TEPE tepe: _tepes) {
-			for(TEPEComponent comp: tepe) {
-				System.out.println("Component: " + comp.getName());
-				generateTEPEProp(comp);
+		_nbOfFloatingSig=0; _nbOfStartNodes=0;
+		_floatingSigProc=""; _floatingSigComp=""; _floatingEnaComp=""; _connect=""; _declare=""; _evtRegister=""; _listeners=""; _eqFuncs=""; _eqFuncDecl="";	
+		if (!_tepes.isEmpty()){
+			System.out.println("And the TEPEs are...............");
+			for(TEPE tepe: _tepes) {
+				for(TEPEComponent comp: tepe) {
+					System.out.println("Component: " + comp.getName());
+					generateTEPEProp(comp,null,null,null);
+				}
 			}
+			_code = "bool aIsId;\n" + _declare;
+			//TEPEFloatingSigListener(ListenerSubject<GeneralListener>* iSimulator, unsigned int inbOfSignals, SignalConstraint** iNotifConstr, NtfSigFuncPointer* iNotifFunc);
+			_code += "TEPEFloatingSigListener* flListener = new TEPEFloatingSigListener(_simulator," + _nbOfFloatingSig + ",";
+			if (_nbOfFloatingSig==0)
+				_code += "0,0";
+			else
+				_code+= "array(" + _nbOfFloatingSig + _floatingSigComp + "),array(" + _nbOfFloatingSig + _floatingSigProc + ")";
+			_code += "," + _nbOfStartNodes + ",array(" + _nbOfStartNodes + _floatingEnaComp + "))" + SCCR;
+			//_code += "SignalConstraint* opMapping[] = {0" + _floatingSigComp + "}"+SCCR;
+			//_code += "NtfSigFuncPointer fnMapping[] = {0" + _floatingSigProc + "}" + SCCR;
+			//_code += "PropertyConstraint* startNodes[] ={0" + _floatingEnaComp + "}" + SCCR;
+			_code += _connect;
+			_code += _listeners;
 		}
-		_code = _declare;
-		_code += "SignalConstraint* opMapping[] = {0" + _floatingSigComp + "}"+SCCR;
-		_code += "NtfSigFuncPointer fnMapping[] = {0" + _floatingSigProc + "}" + SCCR;
-		_code += "PropertyConstraint* startNodes[] ={0" + _floatingEnaComp + "}" + SCCR;
-		_code += _connect;
 	}
 	
 	public void saveFile(String filename) throws FileException{
 		FileUtils.saveFile(filename, _code);
 	}
 	
+	public String getCode(){
+		return _code;
+	}
+	
+	public String getEqFuncs(){
+		return _eqFuncs;
+	}
+	
+	public String getEqFuncDeclaration(){
+		return _eqFuncDecl;
+	}
+	
 	private String getTEPECompName(TEPEComponent currComp){
 		return "_" + Conversion.replaceAllChar(currComp.getName(),' ',"") + currComp.getID();
 	}
@@ -96,64 +123,157 @@ public class SystemCTEPE {
 		String connect="";
 		if (currComp.hasOutSignalComponents()){	
 			for(TEPEComponent outCmp: currComp.getOutSignals()){
-				int index = outCmp.getInSignals().indexOf(currComp)+1;
-				connect += getTEPECompName(currComp) + ".connectSigOut(&" + getTEPECompName(outCmp) + ",&SignalConstraint::notifyS" + index + ")" + SCCR;
+				int index = outCmp.getInSignals().indexOf(currComp);
+				String suffix = (index==-1)? "f": ""+(index+1);
+				connect += getTEPECompName(currComp) + "->connectSigOut(" + getTEPECompName(outCmp) + ",&SignalConstraint::notifyS" + suffix + ")" + SCCR;
 			}
-		}
+		}else
+			System.out.println(getTEPECompName(currComp) + " has no out 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++){
 			_floatingSigProc += ",&SignalConstraint::notifyS" + i;
-			_floatingSigComp += ",&" + getTEPECompName(currComp);
+			_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++){
 			_floatingSigProc += ",&SignalConstraint::notifySf";
-			_floatingSigComp += ",&" + getTEPECompName(currComp);
+			_floatingSigComp += ",(SignalConstraint*)" + getTEPECompName(currComp);
+			_nbOfFloatingSig++;
 		}
 		return connect;
 	}
 	
 	private String connectOutProperties(TEPEComponent currComp){
 		String connect="";
-		if (currComp.hasOutPropertyComponents()){	
-			for(TEPEComponent outCmp: currComp.getOutProperties()){
-				connect += getTEPECompName(currComp) + ".connectEnaOut(array(1,(PropertyConstraint*)&" + getTEPECompName(outCmp) + ",1)" + SCCR;
+		if (currComp.hasInPropertyComponents()){	
+			for(TEPEComponent outCmp: currComp.getInProperties()){
+				connect += getTEPECompName(currComp) + "->connectEnaOut(array(1,(PropertyConstraint*)" + getTEPECompName(outCmp) + "),1)" + SCCR;
 			}
 		}else
 			System.out.println(getTEPECompName(currComp) + " has no out properties.\n");
-		if (!currComp.hasInPropertyComponents()) _floatingEnaComp+= ",&" + getTEPECompName(currComp);
+		if (!currComp.hasOutPropertyComponents()){
+			_floatingEnaComp+= ",(PropertyConstraint*)" + getTEPECompName(currComp);
+			_nbOfStartNodes++;
+		}
 		return connect;
 	}
 	
-	private void generateTEPEProp(TEPEComponent currComp){
+	private void parseExprToTokenList(String iAdd, LinkedList<String> iList){
+		//LinkedList<String> resultList = new LinkedList<String>();
+		Matcher matcher = _varPattern.matcher(iAdd);
+		//System.out.print("Found tokens: ");
+		int lastEnd=0;
+		while (matcher.find()){
+			String token = iAdd.substring(matcher.start(), matcher.end()).trim();
+			if (matcher.start()>lastEnd) iList.add(iAdd.substring(lastEnd,matcher.start()).trim());
+			iList.add(token);
+			lastEnd=matcher.end();
+		}
+		if (lastEnd<iAdd.length()) iList.add(iAdd.substring(lastEnd,iAdd.length()).trim());
+	}
+	
+	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>();
+		parseExprToTokenList(iAdd,addTokenList);
+		boolean aFound;
+		System.out.println("Decomp in replaceTokenInList: ");
+		for(String aToken: addTokenList)
+			System.out.print(aToken + ", ");
+		System.out.println("");
+		do{
+			aFound=false;
+			while(!aFound && itr.hasNext()){
+				aFound = ((String)itr.next()).equals(iReplace);
+			}
+			if (aFound){
+				System.out.println("Pattern found\n");
+				itr.remove();
+				for(String anAddString: addTokenList){
+					itr.add(anAddString);
+				}
+			}
+		}while(itr.hasNext());
+	}
+	
+	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){
 		String cmpName =  getTEPECompName(currComp);
 		
 		if(currComp instanceof TEPEAttributeComponent){
+			if (iTokenList!=null){
+				//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());
+				iTskVarList.add("getTaskByName(\""+ ((TEPEAttributeComponent)currComp).getBlockName() + "\")-> getVariableByName(\"" + currComp.getValue() + "\", aIsId)");
+				//getCommandsImpactingVar(String iVarName, ArrayList<Integer> oList)
+				MappedSystemCTask srcTsk = _tmltranslator.getMappedTaskByName(((TEPEAttributeComponent)currComp).getBlockName());
+				if (srcTsk==null)
+					System.out.println("Task not found: " + ((TEPEAttributeComponent)currComp).getBlockName());
+				else{
+					System.out.println("Search for Var " + currComp.getValue() +" in Task " + ((TEPEAttributeComponent)currComp).getBlockName());
+					srcTsk.getAnalysis().getCommandsImpactingVar(currComp.getValue(), iCmdIDList);
+				}
+			}
+		
 		}else if (currComp instanceof TEPEAliasComponent){
 			//no param
-			_declare+= "AliasConstraint " + cmpName + "()" + SCCR;
+			_declare+= "AliasConstraint* " + cmpName + " = new AliasConstraint(" + currComp.getID() + ")" + SCCR;
 			_connect += connectOutSignals(currComp,2,0);
+		
 		}else if (currComp instanceof TEPEEquationComponent){
 			//EqConstraint(PropType iType, bool iIncludeBounds)
-			_declare+= "EqConstraint " + cmpName + "(GENERAL,true)" + SCCR;
+			//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>();
+			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);
+			}
+			_declare+= "EqConstraint* " + cmpName + " = new EqConstraint(" + currComp.getID() + ",GENERAL,true)" + SCCR;
+			_declare += "addTEPEConstraint(" + cmpName + ");\n";
+			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){
+				System.out.print(anAddString);
+				_eqFuncs += anAddString;
+			}
+			System.out.println();
+			_eqFuncs += ";\n}\n\n";
+			_listeners+= "TEPEEquationListener* " + cmpName + "_listener = new TEPEEquationListener(" + "array(" + addCmdIDList.size();
+			for(Integer id: addCmdIDList){
+				_listeners+= ",(ID)" + id.toString();
+			}
+			_listeners+= ")," + addCmdIDList.size() + "," + "array(" + addTskVarList.size();
+			for(String anAddTskVar: addTskVarList)
+				_listeners+= "," + anAddTskVar;
+			_listeners+= "),&" + cmpName + "_func" + "," + cmpName + ",&SignalConstraint::notifyS1,this, _simulator)" + SCCR;
 			_connect += connectOutProperties(currComp);
+		
 		}else if (currComp instanceof TEPELogicalConstraintComponent){
 			//LogConstraint(PropType iType, bool iIncludeBounds)
 			//SeqConstraint(PropType iType, bool iIncludeBounds)
 			if (((TEPELogicalConstraintComponent)currComp).getType()==TEPELogicalConstraintComponent.SEQUENCE){
-				_declare += "SeqConstraint " + cmpName + "(GENERAL,true)" + SCCR;
+				_declare += "SeqConstraint* " + cmpName + " = new SeqConstraint("+ currComp.getID() + ",GENERAL,true)" + SCCR;
 			}else{
-				_declare += "LogConstraint " + cmpName + "(GENERAL,true)" + SCCR;
+				_declare += "LogConstraint* " + cmpName + " = new LogConstraint("+ currComp.getID() + ",GENERAL,true)" + SCCR;
 			}
+			_declare += "addTEPEConstraint(" + cmpName + ");\n";
 			_connect += connectOutSignals(currComp,2,1);
 			_connect += connectOutProperties(currComp);
+		
 		}else if (currComp instanceof TEPEPropertyComponent){
 			//PropLabConstraint(PropLabType iType)
-			_declare += "PropLabConstraint " + cmpName + "(";
+			_declare += "PropLabConstraint* " + cmpName + " = new PropLabConstraint(";
 			TEPEPropertyComponent propComp = (TEPEPropertyComponent)currComp;
 			if (propComp.getType()==TEPEPropertyComponent.LIVENESS){
 				_declare += "LIVENESS";
@@ -165,10 +285,12 @@ public class SystemCTEPE {
 				_declare += "NREACHABILITY";
 			}
 			_declare += ")" + SCCR;
+			_declare += "addTEPEConstraint(" + cmpName + ");\n";
 			_connect += connectOutProperties(currComp);
+		
 		}else if (currComp instanceof TEPEPropertyOperatorComponent){
 			//PropRelConstraint(PropRelType iType)
-			_declare += "PropRelConstraint " + cmpName + "(";
+			_declare += "PropRelConstraint* " + cmpName + " = new PropRelConstraint(";
 			TEPEPropertyOperatorComponent propOpComp = (TEPEPropertyOperatorComponent)currComp;
 			if (propOpComp.getType()==TEPEPropertyOperatorComponent.OR){
 				_declare += "OR";
@@ -177,22 +299,83 @@ public class SystemCTEPE {
 			}
 			_declare += ")" + SCCR;
 			//_connect += connectOutSignals(currComp);
+			_declare += "addTEPEConstraint(" + cmpName + ");\n";
 			_connect += connectOutProperties(currComp);
+		
 		}else if (currComp instanceof TEPESettingComponent){
 			//Variable Setting
+			if (iTokenList!=null){
+				String[] lhsrhs = currComp.getValue().split("=",2);
+				System.out.println("Replace " + lhsrhs[0] + " by " + lhsrhs[1] + " before: ");
+				for(String aToken: iTokenList)
+					System.out.print(aToken + ", ");
+				System.out.println("\nafter:");
+				replaceTokenInList(iTokenList, lhsrhs[0], lhsrhs[1]);
+				for(String aToken: iTokenList)
+					System.out.print(aToken + ", ");
+				System.out.println("");
+				for(TEPEComponent linkedComps: currComp.getInAttributes())
+					generateTEPEProp(linkedComps, iTokenList, iTskVarList, iCmdIDList);
+			}
+		
 		}else if (currComp instanceof TEPESignalComponent){
 			//Declaration of Signal?
+			//TEPESigListener(ID* iSubjectIDs, unsigned int nbOfSubjectIDs, unsigned int iEvtBitmap, unsigned int iTransTypeBitmap, SignalConstraint* iNotifConstr, NtfSigFuncPointer iNotifFunc, SimComponents* iSimComp)
+			if (currComp.hasOutSignalComponents()){
+				String[] aTokens = currComp.getValue().split("__");
+				System.out.println("name of block: "  + currComp.getValue());
+				for(int i=0; i<aTokens.length; i++)
+					System.out.println("A tokens [" + i + "]: " + aTokens[i]);
+				System.out.println("A tokens lenght: " + aTokens.length);
+				String[] aSrcIDs = aTokens[0].split("_");
+				String[] aEvts = aTokens[1].split("_");
+				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);
+				for(int i=1; i<aSrcIDs.length; i++)
+					_listeners+= ",(ID)" + aSrcIDs[i];
+				_listeners+= ")," + (aSrcIDs.length-1) + ",";
+				int aEvtCode=0, aTransCode=0;
+				for(int aEvtsInSigCmp=0; aEvtsInSigCmp<aEvts.length; aEvtsInSigCmp++){
+					for(int aEvtDescr=0; aEvtDescr<aEvtDescriptor.length; aEvtDescr++ ){
+						if (aEvts[aEvtsInSigCmp].toUpperCase().equals(aEvtDescriptor[aEvtDescr])) aEvtCode += (1<<aEvtDescr);
+					}
+				}
+				for(int aTransInSigCmp=0; aTransInSigCmp<aTransTypes.length; aTransInSigCmp++){
+					for(int aTransDescr=0; aTransDescr<aTransDescriptor.length; aTransDescr++ ){
+						if (aTransTypes[aTransInSigCmp].toUpperCase().equals(aTransDescriptor[aTransDescr])) aTransCode += (1<<aTransDescr);
+					}
+				}
+				
+				_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;*/
+				String aDstFuncs="";
+				for (TEPEComponent aDstCmp: currComp.getOutSignals()){
+					int index = aDstCmp.getInSignals().indexOf(currComp);
+					String suffix = (index==-1)? "f": ""+(index+1);
+					_listeners += ",(SignalConstraint*)" + getTEPECompName(aDstCmp);
+					aDstFuncs += ",(NtfSigFuncPointer)&SignalConstraint::notifyS" + suffix;
+				}
+				_listeners += "),array(" + currComp.getOutSignals().size() + aDstFuncs + "),this, _simulator)" + SCCR;
+			}
+			
 		}else if (currComp instanceof TEPETimeConstraintComponent){
 			//TimeMMConstraint(PropType iType, TMLTime iTmin, TMLTime iTmax, bool iRetrigger, bool iIncludeBounds)
 			//TimeTConstraint(TMLTime iT, bool iRetrigger, bool iIncludeBounds)
 			TEPETimeConstraintComponent timeConstr = (TEPETimeConstraintComponent)currComp;
 			if (currComp.getInSignals().size()>1){
-				_declare += "TimeMMConstraint " + cmpName +  "(GENERAL, " + timeConstr.getMinTime() + "," + timeConstr.getMaxTime() + ",false,true)"  + SCCR;
+				_declare += "TimeMMConstraint* " + cmpName +  " = new TimeMMConstraint("+ currComp.getID() + ",GENERAL, " + timeConstr.getMinTime() + "," + timeConstr.getMaxTime() + ",false,true)"  + SCCR;
 				_connect += connectOutSignals(currComp,2,0);
 			}else{
-				_declare += "TimeTConstraint " + cmpName + "(" + timeConstr.getMinTime() + ",false,true)"  + SCCR;
+				_declare += "TimeTConstraint* " + cmpName + " =  new TimeTConstraint(" + currComp.getID() + "," + timeConstr.getMinTime() + ",false,true)"  + SCCR;
 				_connect += connectOutSignals(currComp,1,0);
 			}
+			_declare += "addTEPEConstraint(" + cmpName + ");\n";
 			_connect += connectOutProperties(currComp);
 		}
 	}
diff --git a/src/tmltranslator/tomappingsystemc2/TML2MappingSystemC.java b/src/tmltranslator/tomappingsystemc2/TML2MappingSystemC.java
index 0a7d82c70c..34a7f6e650 100755
--- a/src/tmltranslator/tomappingsystemc2/TML2MappingSystemC.java
+++ b/src/tmltranslator/tomappingsystemc2/TML2MappingSystemC.java
@@ -71,10 +71,10 @@ public class TML2MappingSystemC {
 	private String header, declaration, mainFile, src;
 	private ArrayList<MappedSystemCTask> tasks;
 	
-	private ArrayList<EBRDD> ebrdds;
+	//private ArrayList<EBRDD> ebrdds;
 	//private ArrayList<TEPE> tepes;
 	SystemCTEPE tepeTranslator;
-	private ArrayList<SystemCEBRDD> systemCebrdds = new ArrayList<SystemCEBRDD>();
+	//private ArrayList<SystemCEBRDD> systemCebrdds = new ArrayList<SystemCEBRDD>();
     
 	public TML2MappingSystemC(TMLModeling _tmlm) {
 		tmlmodeling = _tmlm;
@@ -88,18 +88,18 @@ public class TML2MappingSystemC {
 
 	public TML2MappingSystemC(TMLModeling _tmlm, ArrayList<EBRDD> _ebrdds, ArrayList<TEPE> _tepes) {
 		tmlmodeling = _tmlm;
-		ebrdds = _ebrdds;
+		//ebrdds = _ebrdds;
 		tmlmapping = tmlmodeling.getDefaultMapping();
-		tepeTranslator = new  SystemCTEPE(_tepes);
-		tepeTranslator.generateTEPEs();
+		tepeTranslator = new  SystemCTEPE(_tepes, this);
+		//tepeTranslator.generateTEPEs();
 	}
 	
 	public TML2MappingSystemC(TMLMapping _tmlmapping, ArrayList<EBRDD> _ebrdds, ArrayList<TEPE> _tepes) {
 		tmlmapping = _tmlmapping;
-		ebrdds = _ebrdds;
+		//ebrdds = _ebrdds;
 		tmlmapping.makeMinimumMapping();
-		tepeTranslator = new  SystemCTEPE(_tepes);
-		tepeTranslator.generateTEPEs();
+		tepeTranslator = new  SystemCTEPE(_tepes, this);
+		//tepeTranslator.generateTEPEs();
  	}
     
 	public void saveFile(String path, String filename) throws FileException {  
@@ -107,7 +107,7 @@ public class TML2MappingSystemC {
         	FileUtils.saveFile(path + filename + ".cpp", getFullCode());
 		src += filename + ".cpp";
 		FileUtils.saveFile(path + "Makefile.src", src);
-		tepeTranslator.saveFile(path + "src_simulator/TEPE/test.h");
+		//tepeTranslator.saveFile(path + "src_simulator/TEPE/test.h");
 	}
 	
 	public String getFullCode() {
@@ -121,7 +121,7 @@ public class TML2MappingSystemC {
 		tmlmodeling = tmlmapping.getTMLModeling();
 		tasks = new ArrayList<MappedSystemCTask>();
         	//generateSystemCTasks();
-		generateEBRDDs();
+		//generateEBRDDs();
 		generateMainFile();
 		generateMakefileSrc();
 	}
@@ -129,6 +129,7 @@ public class TML2MappingSystemC {
 	private void generateMainFile() {
 		makeHeader();
 		makeDeclarations();
+		header += tepeTranslator.getEqFuncDeclaration() + "\n";
 		mainFile = header + declaration;
 		mainFile = Conversion.indentString(mainFile, 4);
 	}
@@ -138,22 +139,31 @@ public class TML2MappingSystemC {
 		for(TMLTask mst: tmlmapping.getMappedTasks()) {
 			src += mst.getName() + ".cpp ";
 		}
-		for(EBRDD ebrdd: ebrdds){
-			src += ebrdd.getName() + ".cpp ";
-		}
+		//for(EBRDD ebrdd: ebrdds){
+		//	src += ebrdd.getName() + ".cpp ";
+		//}
 	}
 	
 	private void makeHeader() {
 		// System headers
 		header = "#include <Simulator.h>" + CR;
+		header += "#include <AliasConstraint.h>\n#include <EqConstraint.h>\n#include <LogConstraint.h>\n#include <PropLabConstraint.h>\n";
+		header += "#include <PropRelConstraint.h>\n#include <SeqConstraint.h>\n#include <SignalConstraint.h>\n#include <TimeMMConstraint.h>\n";
+		header += "#include <TimeTConstraint.h>\n";
+		header += "#include <CPU.h>\n#include <SingleCoreCPU.h>\n#include <RRScheduler.h>\n#include <PrioScheduler.h>\n#include <Bus.h>\n";
+		header += "#include <Bridge.h>\n#include <Memory.h>\n#include <TMLbrbwChannel.h>\n#include <TMLnbrnbwChannel.h>\n";
+		header += "#include <TMLbrnbwChannel.h>\n#include <TMLEventBChannel.h>\n#include <TMLEventFChannel.h>\n#include <TMLEventFBChannel.h>\n";
+		header += "#include <TMLTransaction.h>\n#include <TMLCommand.h>\n#include <TMLTask.h>\n";
+		header += "#include <SimComponents.h>\n#include <Server.h>\n#include <SimServSyncInfo.h>\n#include <ListenersSimCmd.h>\n";
+
 		// Generate tasks header
 		for(TMLTask mst: tmlmapping.getMappedTasks()) {
 			//header += "#include <" + mst.getReference() + ".h>" + CR;
 			header += "#include <" + mst.getName() + ".h>" + CR;
 		}
-		for(EBRDD ebrdd: ebrdds){
-			header += "#include <" + ebrdd.getName() + ".h>" + CR;
-		}
+		//for(EBRDD ebrdd: ebrdds){
+		//	header += "#include <" + ebrdd.getName() + ".h>" + CR;
+		//}
 		header += CR;
 	}
 	
@@ -398,26 +408,36 @@ public class TML2MappingSystemC {
 			declaration += "addTask(task__"+ task.getName() +")"+ SCCR;
 		}
 		//int[] aStatistics = new int[8];
+		declaration += "\n}\n\n";
+		
+		//Declaration of TEPEs
+		declaration += "void generateTEPEs(){" + CR;
+		declaration += "//Declaration of TEPEs" + CR;
+		tepeTranslator.generateTEPEs();
+		declaration += tepeTranslator.getCode();
+		
+		//Generation of tasks
 		for(MappedSystemCTask task: tasks){
 			task.determineCheckpoints(aStatistics);
 			task.generateSystemC(debug, optimize);
 		}
+		
+		//Declaration of TEPEs continued
+		declaration += CR;
+		declaration += "}\n};\n\n" + tepeTranslator.getEqFuncs();
+		declaration +="#include <main.h>\n";
+		
 		if (aStatistics[0]!=0) System.out.println("Global gain variables " + 100 * aStatistics[1] / aStatistics[0]);
 		if (aStatistics[2]!=0) System.out.println("Global gain Channels " + 100 * aStatistics[3] / aStatistics[2]);
 		if (aStatistics[4]!=0) System.out.println("Global gain events " + 100 * aStatistics[5] / aStatistics[4]);
 		if (aStatistics[6]!=0) System.out.println("Global gain checkpoints " + 100 * aStatistics[7] / aStatistics[6]);
-		declaration += CR;
-
+		
 		//Declaration of EBRDDs
-		declaration += "//Declaration of EBRDDs" + CR;
+		/*declaration += "//Declaration of EBRDDs" + CR;
 		for(EBRDD ebrdd: ebrdds){
 			declaration += ebrdd.getName() + "* ebrdd__" + ebrdd.getName() + " = new " + ebrdd.getName() + "(0, \""+ ebrdd.getName() + "\");\n";
 			declaration += "addEBRDD(ebrdd__"+ ebrdd.getName() +")"+ SCCR;
-		}
-
-
-		declaration += "}\n};\n\n";
-		declaration +="#include <main.h>\n";
+		}*/
   	}
 
 
@@ -609,20 +629,28 @@ public class TML2MappingSystemC {
 		return null;
 	}
 
-	private void generateEBRDDs(){
+	/*private void generateEBRDDs(){
 		for(EBRDD ebrdd: ebrdds){
 			SystemCEBRDD newEbrdd = new SystemCEBRDD(ebrdd, tmlmodeling, tmlmapping);
 			newEbrdd.generateSystemC(debug);
 			systemCebrdds.add(newEbrdd);
 		}
-	}
+	}*/
 	
 	private void generateTaskFiles(String path) throws FileException {
 		for(MappedSystemCTask mst: tasks) {
 			mst.saveInFiles(path);
 		}
-		for(SystemCEBRDD ebrdd: systemCebrdds) {
-			ebrdd.saveInFiles(path);
+		//for(SystemCEBRDD ebrdd: systemCebrdds) {
+		//	ebrdd.saveInFiles(path);
+		//}
+	}
+	
+	
+	public MappedSystemCTask getMappedTaskByName(String iName){
+		for(MappedSystemCTask task: tasks){
+			if (task.getTMLTask().getName().equals(iName)) return task;
 		}
+		return null;
 	}
 }
-- 
GitLab