From c68b86c4000706e42bd89ceb1847013e55f21ded Mon Sep 17 00:00:00 2001 From: Ludovic Apvrille <ludovic.apvrille@telecom-paristech.fr> Date: Thu, 31 Mar 2011 20:01:31 +0000 Subject: [PATCH] AVATAR code generator: Update on single sending requests --- executablecode/Makefile.src | 2 +- src/avatartranslator/AvatarBlock.java | 30 +++++++++++++++++++ .../toexecutable/AVATAR2CPOSIX.java | 23 +++++++++++++- 3 files changed, 53 insertions(+), 2 deletions(-) diff --git a/executablecode/Makefile.src b/executablecode/Makefile.src index fa78915f96..c3bde51c3e 100755 --- a/executablecode/Makefile.src +++ b/executablecode/Makefile.src @@ -1 +1 @@ -SRCS = generated_src/main.c generated_src/Wallet.c generated_src/CoffeeMachine.c generated_src/TeaButton.c generated_src/CoffeeButton.c \ No newline at end of file +SRCS = generated_src/main.c generated_src/Block0.c \ No newline at end of file diff --git a/src/avatartranslator/AvatarBlock.java b/src/avatartranslator/AvatarBlock.java index d43c4102e8..e31ce9682c 100644 --- a/src/avatartranslator/AvatarBlock.java +++ b/src/avatartranslator/AvatarBlock.java @@ -440,6 +440,36 @@ public class AvatarBlock extends AvatarElement { return true; } + public int getMaxNbOfParams() { + if (asm == null) { + return 0; + } + + int cpt = 0; + + for(AvatarStateMachineElement asme :asm.getListOfElements()) { + if (asme instanceof AvatarActionOnSignal) { + cpt = Math.max(cpt, ((AvatarActionOnSignal)asme).getNbOfValues()); + } + } + return cpt; + } + + public int getMaxNbOfMultipleBranches() { + if (asm == null) { + return 0; + } + + int cpt = 1; + + for(AvatarStateMachineElement asme :asm.getListOfElements()) { + if (asme instanceof AvatarState) { + cpt = Math.max(cpt, asme.nbOfNexts()); + } + } + return cpt; + } + } \ No newline at end of file diff --git a/src/avatartranslator/toexecutable/AVATAR2CPOSIX.java b/src/avatartranslator/toexecutable/AVATAR2CPOSIX.java index 7d1e719bf4..01c2af3120 100755 --- a/src/avatartranslator/toexecutable/AVATAR2CPOSIX.java +++ b/src/avatartranslator/toexecutable/AVATAR2CPOSIX.java @@ -227,6 +227,11 @@ public class AVATAR2CPOSIX { s += makeAttributesDeclaration(_block, _taskFile); s+= CR + "int __currentState = STATE__START__STATE;" + CR; + s+= "request *__req0, *__req1;" + CR; + int nbOfMaxParams = _block.getMaxNbOfParams(); + for(int i=0; i<_block.getMaxNbOfMultipleBranches(); i++) { + s+= "int *__params0[" + nbOfMaxParams + "];" + CR; + } s+= CR + "char * __myname = (char *)arg;" + CR; @@ -299,6 +304,22 @@ public class AVATAR2CPOSIX { if (_asme instanceof AvatarActionOnSignal) { AvatarActionOnSignal aaos = (AvatarActionOnSignal)_asme; + AvatarSignal as = aaos.getSignal(); + AvatarRelation ar = avspec.getAvatarRelationWithSignal(as); + + if (ar != null) { + if (aaos.isSending()) { + // Putting params + for(i=0; i<aaos.getNbOfValues() ;i++) { + ret += "__params0[" + i + "] = &" + aaos.getValue(i) + ";" + CR; + } + if (ar.isAsynchronous()) { + ret += "__req0 = getNewRequest(SEND_ASYNC_REQUEST, 0, 0, 0, " + aaos.getNbOfValues() + ", __params0);" + CR; + } else { + ret += "__req0 = getNewRequest(SEND_SYNC_REQUEST, 0, 0, 0, " + aaos.getNbOfValues() + ", __params0);" + CR; + } + } + } } @@ -316,7 +337,7 @@ public class AVATAR2CPOSIX { } public void makeThreadsInMain(boolean _debug) { - mainFile.appendToMainCode("/* Threads of tasks */" + CR); + mainFile.appendToMainCode(CR + "/* Threads of tasks */" + CR); for(TaskFile taskFile: taskFiles) { mainFile.appendToMainCode("pthread_t thread__" + taskFile.getName() + ";" + CR); } -- GitLab