diff --git a/src/tmltranslator/ctranslator/DataTransfer.java b/src/tmltranslator/ctranslator/DataTransfer.java index 8a71e3ec51faa9a647d361b77c80bcf3ef98905a..c4e19d02b5f48656db12085cc97b91abf51f3a1b 100755 --- a/src/tmltranslator/ctranslator/DataTransfer.java +++ b/src/tmltranslator/ctranslator/DataTransfer.java @@ -62,20 +62,20 @@ public class DataTransfer { private int type; private String name = ""; - private Buffer inBuffer; + private ArrayList<Buffer> inBuffers; private Buffer outBuffer; private TMLCPLib tmlcplib; private ArrayList<Signal> outSignals; private ArrayList<Signal> inSignals; - public DataTransfer( TMLCPLib _tmlcplib, Buffer _inBuffer, Buffer _outBuffer, ArrayList<Signal> _inSignals, ArrayList<Signal> _outSignals ) { + /*public DataTransfer( TMLCPLib _tmlcplib, ArrayList<Buffer> _inBuffers, Buffer _outBuffer, ArrayList<Signal> _inSignals, ArrayList<Signal> _outSignals ) { name = _tmlcplib.getName(); tmlcplib = _tmlcplib; inSignals = _inSignals; outSignals = _outSignals; - inBuffer = _inBuffer; + inBuffers = _inBuffers; outBuffer = _outBuffer; - } + }*/ public DataTransfer( TMLCPLib _tmlcplib, ArrayList<Signal> _inSignals, ArrayList<Signal> _outSignals ) { name = _tmlcplib.getName(); @@ -87,6 +87,11 @@ public class DataTransfer { else { outSignals = _outSignals; } + init(); + } + + private void init() { + inBuffers = new ArrayList<Buffer>(); } public TMLCPLib getTMLCPLib() { @@ -117,12 +122,20 @@ public class DataTransfer { outSignals.add( _outSignal ); } - public void setInBuffer( Buffer _inBuffer) { + public void addInSignal( Signal _inSignal ) { + inSignals.add( _inSignal ); + } + + /*public void setInBuffer( Buffer _inBuffer) { inBuffer = _inBuffer; + }*/ + + public void addInBuffer( Buffer _inBuffer ) { + inBuffers.add( _inBuffer ); } - public Buffer getInBuffer() { - return inBuffer; + public ArrayList<Buffer> getInBuffers() { + return inBuffers; } public void setOutBuffer( Buffer _outBuffer) { @@ -154,8 +167,8 @@ public class DataTransfer { for( Signal sig: outSignals ) { s.append( "outSignal: " + sig.getName() + "\n\t" ); } - if( inBuffer != null ) { - s.append( "inBuffer: " + inBuffer.toString() + "\n\t" ); + for( Buffer buff: inBuffers ) { + s.append( "inBuffer: " + buff.toString() + "\n\t" ); } if( outBuffer != null ) { s.append( "outBuffer: " + outBuffer.toString() ); diff --git a/src/tmltranslator/ctranslator/TMLCCodeGeneration.java b/src/tmltranslator/ctranslator/TMLCCodeGeneration.java index e86a467cd56e4773df8808a3128bd911d94260b3..d01125c1d054be96a9e6688f1ed112c26d40f59e 100755 --- a/src/tmltranslator/ctranslator/TMLCCodeGeneration.java +++ b/src/tmltranslator/ctranslator/TMLCCodeGeneration.java @@ -457,29 +457,25 @@ public class TMLCCodeGeneration { newInSignalsList.add( newSig ); //to be substitued to the inSignals of op signalsList.add( newSig ); } - Buffer inBuff = op.getInBuffer(); - Buffer outBuff = op.getOutBuffer(); + Buffer inBuff = op.getInBuffer(); //the operation inBuffer is the dataTransfer outBuffer String portName = "buff_" + dt.getTMLCPLib().getArtifacts().get(0).getPortName(); - if( inBuff != null ) { - //TraceManager.addDev( "Trying to match " + portName + " and " + inBuff.getName() ); + if( inBuff != null ) { //the port mapped on the CP is associated to the CP output buffer if( inBuff.getName().equals( portName ) ) { - /*inBuff.setStartAddress( startAddress ); - inBuff.setEndAddress( endAddress );*/ - //TraceManager.addDev( "Operation " + op.getName() + " inBuffer = " + inBuff.getName() + " mapped port: " + portName ); - dt.setOutBuffer( inBuff ); //Careful with which is IN and which is OUT! + dt.setOutBuffer( inBuff ); } } - if( outBuff != null ) { - //TraceManager.addDev( "Trying to match " + portName + " and " + outBuff.getName() ); - if( outBuff.getName().equals( portName ) ) { - /*outBuff.setStartAddress( startAddress ); - outBuff.setEndAddress( endAddress );*/ - //TraceManager.addDev( "Operation " + op.getName() + " outBuffer = " + outBuff.getName() + " mapped port: " + portName ); - dt.setInBuffer( inBuff ); //Careful with which is IN and which is OUT! + } + op.setInSignals( newInSignalsList ); + newInSignalsList = new ArrayList<Signal>(); + } + for( DataTransfer dt: dataTransfersList ) { + for( Signal inSignal: dt.getInSignals() ) { //for each in signal corresponds an inBuffer + String buffName = "buff_" + inSignal.getName(); + for( Buffer buff: buffersList ) { + if( buff.getName().equals( buffName ) ) { + dt.addInBuffer( buff ); } } - op.setInSignals( newInSignalsList ); - newInSignalsList = new ArrayList<Signal>(); } } } @@ -501,6 +497,25 @@ public class TMLCCodeGeneration { return null; } + private Operation getOperationWithSameOutputSignals( ArrayList<Signal> outSignals ) { + + int counter = 0; + for( Operation op: operationsList ) { + Signal sig = op.getOutSignal(); //operations have one and only one outSignal + if( sig != null){ + TraceManager.addDev( "Checking if signal " + sig.getName() + " is contained in " + outSignals.toString() ); + if( outSignals.contains( sig ) ) { + counter++; + } + if( counter == outSignals.size() ) { + return op; + } + counter = 0; + } + } + return null; + } + //retrieve the signal whose channel has a destintation port equal to portName private ArrayList<Signal> getDTInSignals( String portName ) {