From 2f314f11c50ed68a8f693a18ab4c355e0b45df1a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marvin=20Ha=CC=88user?= <mhaeuser@posteo.de>
Date: Sat, 25 Nov 2023 20:00:11 +0100
Subject: [PATCH] simulator: separate action and delay action

Commit f1db3a0a260aeffef9bbd4521a7d6b17fe876e97 adjusted
ActionFuncPointer to generally return a delay. However, this is only
done for TMLDelayAction generation, leaving the other producers of
ActionFuncPointer emitting functions without a return value despite the
changed return type.

To address this, distinguish between ActionFuncPointer and
DelayActionFuncPointer.
---
 simulators/c++2/src_simulator/app/TMLDelayCommand.cpp         | 2 +-
 simulators/c++2/src_simulator/app/TMLDelayCommand.h           | 4 ++--
 simulators/c++2/src_simulator/definitions.h                   | 4 +++-
 .../tmltranslator/tomappingsystemc2/MappedSystemCTask.java    | 4 ++--
 4 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/simulators/c++2/src_simulator/app/TMLDelayCommand.cpp b/simulators/c++2/src_simulator/app/TMLDelayCommand.cpp
index 58880e49ca..3ebf2f69e1 100644
--- a/simulators/c++2/src_simulator/app/TMLDelayCommand.cpp
+++ b/simulators/c++2/src_simulator/app/TMLDelayCommand.cpp
@@ -43,7 +43,7 @@ Ludovic Apvrille, Renaud Pacalet
 #include <TMLTransaction.h>
 #include <SimComponents.h>
 //#include <CommandListener.h>
-TMLDelayCommand::TMLDelayCommand(ID iID, TMLTask* iTask,TMLLength iStatLength, ActionFuncPointer iActionFunc, const char* iLiveVarList, bool iCheckpoint, bool isActiveDelay):TMLCommand(iID, iTask, 1, 1, iLiveVarList, iCheckpoint),_actionFunc(iActionFunc){
+TMLDelayCommand::TMLDelayCommand(ID iID, TMLTask* iTask,TMLLength iStatLength, DelayActionFuncPointer iActionFunc, const char* iLiveVarList, bool iCheckpoint, bool isActiveDelay):TMLCommand(iID, iTask, 1, 1, iLiveVarList, iCheckpoint),_actionFunc(iActionFunc){
 	if (!isActiveDelay){
 	    _isActiveDelay = false;
 	}else {
diff --git a/simulators/c++2/src_simulator/app/TMLDelayCommand.h b/simulators/c++2/src_simulator/app/TMLDelayCommand.h
index 7e1d4b838d..a564fec926 100644
--- a/simulators/c++2/src_simulator/app/TMLDelayCommand.h
+++ b/simulators/c++2/src_simulator/app/TMLDelayCommand.h
@@ -59,7 +59,7 @@ public:
     bool _isActiveDelay;
     virtual bool getActiveDelay() {return _isActiveDelay;}
     virtual bool isDelayTransaction(){return true;}
-	TMLDelayCommand(ID iID, TMLTask* iTask, TMLLength iStatLength, ActionFuncPointer iActionFunc, const char* iLiveVarList, bool iCheckpoint, bool isActiveDelay);
+	TMLDelayCommand(ID iID, TMLTask* iTask, TMLLength iStatLength, DelayActionFuncPointer iActionFunc, const char* iLiveVarList, bool iCheckpoint, bool isActiveDelay);
 	///TMLDelayCommand
 	virtual ~TMLDelayCommand(){}
 	void execute();
@@ -71,7 +71,7 @@ public:
 	inline std::string getCommandStr() const {return "DL";}
 protected:
 	///Member function pointer to the action function
-	ActionFuncPointer _actionFunc;
+	DelayActionFuncPointer _actionFunc;
 	TMLCommand* prepareNextTransaction();
 };
 
diff --git a/simulators/c++2/src_simulator/definitions.h b/simulators/c++2/src_simulator/definitions.h
index aa04d2bfca..2cf89988ce 100644
--- a/simulators/c++2/src_simulator/definitions.h
+++ b/simulators/c++2/src_simulator/definitions.h
@@ -685,7 +685,9 @@ typedef std::deque<Parameter* > ParamQueue;
 ///Type of member function pointer used to indicate a function encapsulating a condition (for TMLChoiceCommand)
 typedef unsigned int (TMLTask::*CondFuncPointer) ();
 ///Type of member function pointer used to indicate a function encapsulating an action (for TMLActionCommand)
-typedef int (TMLTask::*ActionFuncPointer) ();
+typedef void (TMLTask::*ActionFuncPointer) ();
+///Type of member function pointer used to indicate a function encapsulating a delay action (for TMLDelayCommand)
+typedef TMLTime (TMLTask::*DelayActionFuncPointer) ();
 ///Type of member function pointer used to indicate a function encapsulating a condition (for TMLChoiceCommand)
 typedef TMLTime (TMLTask::*LengthFuncPointer) ();
 ///Type of pointer to indicate a function encapsulating a TEPE condition
diff --git a/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java b/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java
index acf5412227..1069857f6a 100644
--- a/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java
+++ b/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java
@@ -587,10 +587,10 @@ public class MappedSystemCTask {
                     idString = String.valueOf(currElem.getID());
                 }
                 hcode += "TMLDelayCommand " + cmdName + SCCR;
-                initCommand += "," + cmdName + "(" + idString + ",this,1,(ActionFuncPointer)&" + reference + "::" + cmdName +
+                initCommand += "," + cmdName + "(" + idString + ",this,1,(DelayActionFuncPointer)&" + reference + "::" + cmdName +
                                "_func," +
                                " " + getFormattedLiveVarStr(currElem) + ", " + delay.getActiveDelay() + ")" + CR;
-                //initCommand += "," + cmdName + "(" + idString + ",this,"+ delayLen +",(ActionFuncPointer)&" + reference + "::" + cmdName +
+                //initCommand += "," + cmdName + "(" + idString + ",this,"+ delayLen +",(DelayActionFuncPointer)&" + reference + "::" + cmdName +
                  //       "_func," +
                  //       " " + getFormattedLiveVarStr(currElem) + ", " + delay.getActiveDelay() + ")" + CR;
                 nextCommand = cmdName + ".setNextCommand(array(1,(TMLCommand*)" + makeCommands(currElem.getNextElement(0), false, retElement, null) + "));\n";
-- 
GitLab