Merge "[553284] positioning of new subapp" into 1.11.x
diff --git a/plugins/org.eclipse.fordiac.ide.export.forte_ng/build.properties b/plugins/org.eclipse.fordiac.ide.export.forte_ng/build.properties
index e9863e2..600d1b4 100644
--- a/plugins/org.eclipse.fordiac.ide.export.forte_ng/build.properties
+++ b/plugins/org.eclipse.fordiac.ide.export.forte_ng/build.properties
@@ -1,4 +1,5 @@
-source.. = src/
+source.. = src/,\
+           xtend-gen/
 output.. = bin/
 bin.includes = META-INF/,\
                .,\
diff --git a/plugins/org.eclipse.fordiac.ide.export.forte_ng/src/org/eclipse/fordiac/ide/export/forte_ng/ForteFBTemplate.xtend b/plugins/org.eclipse.fordiac.ide.export.forte_ng/src/org/eclipse/fordiac/ide/export/forte_ng/ForteFBTemplate.xtend
index ed897fe..586b101 100644
--- a/plugins/org.eclipse.fordiac.ide.export.forte_ng/src/org/eclipse/fordiac/ide/export/forte_ng/ForteFBTemplate.xtend
+++ b/plugins/org.eclipse.fordiac.ide.export.forte_ng/src/org/eclipse/fordiac/ide/export/forte_ng/ForteFBTemplate.xtend
@@ -127,8 +127,8 @@
 	'''
 
 	def protected CharSequence generateFBInterfaceDefinition() {
-		val int[] inputWith = newArrayList
-		val int[] inputWithIndexes = newArrayList
+		val inputWith = newArrayList
+		val inputWithIndexes = newArrayList
 		type.interfaceList.eventInputs.forEach[event | {
 			if(event.with.empty) {
 				inputWithIndexes.add(-1)
@@ -140,8 +140,8 @@
 				inputWith.add(255)
 			}
 		}]
-		val int[] outputWith = newArrayList
-		val int[] outputWithIndexes = newArrayList
+		val outputWith = newArrayList
+		val outputWithIndexes = newArrayList
 		type.interfaceList.eventOutputs.forEach[event | {
 			if(event.with.empty) {
 				outputWithIndexes.add(-1)
diff --git a/plugins/org.eclipse.fordiac.ide.export.forte_ng/src/org/eclipse/fordiac/ide/export/forte_ng/ForteNgExportFilter.xtend b/plugins/org.eclipse.fordiac.ide.export.forte_ng/src/org/eclipse/fordiac/ide/export/forte_ng/ForteNgExportFilter.xtend
index 5c3472f..f4e84e2 100644
--- a/plugins/org.eclipse.fordiac.ide.export.forte_ng/src/org/eclipse/fordiac/ide/export/forte_ng/ForteNgExportFilter.xtend
+++ b/plugins/org.eclipse.fordiac.ide.export.forte_ng/src/org/eclipse/fordiac/ide/export/forte_ng/ForteNgExportFilter.xtend
@@ -28,6 +28,9 @@
 import org.eclipse.fordiac.ide.model.libraryElement.CompositeFBType
 import org.eclipse.fordiac.ide.model.libraryElement.LibraryElement
 import org.eclipse.fordiac.ide.model.libraryElement.ServiceInterfaceFBType
+import org.eclipse.fordiac.ide.model.libraryElement.SimpleFBType
+import org.eclipse.fordiac.ide.export.forte_ng.simple.SimpleFBHeaderTemplate
+import org.eclipse.fordiac.ide.export.forte_ng.simple.SimpleFBImplTemplate
 
 class ForteNgExportFilter extends TemplateExportFilter {
 
@@ -38,6 +41,11 @@
 					new BasicFBHeaderTemplate(type, '''«type.name».h''', Paths.get("")),
 					new BasicFBImplTemplate(type, '''«type.name».cpp''', Paths.get(""))
 				}
+			SimpleFBType:
+				#{
+					new SimpleFBHeaderTemplate(type, '''«type.name».h''', Paths.get("")),
+					new SimpleFBImplTemplate(type, '''«type.name».cpp''', Paths.get(""))
+				}
 			CompositeFBType:
 				#{
 					new CompositeFBHeaderTemplate(type, '''«type.name».h''', Paths.get("")),
diff --git a/plugins/org.eclipse.fordiac.ide.export.forte_ng/src/org/eclipse/fordiac/ide/export/forte_ng/simple/SimpleFBHeaderTemplate.xtend b/plugins/org.eclipse.fordiac.ide.export.forte_ng/src/org/eclipse/fordiac/ide/export/forte_ng/simple/SimpleFBHeaderTemplate.xtend
new file mode 100644
index 0000000..ad6876d
--- /dev/null
+++ b/plugins/org.eclipse.fordiac.ide.export.forte_ng/src/org/eclipse/fordiac/ide/export/forte_ng/simple/SimpleFBHeaderTemplate.xtend
@@ -0,0 +1,64 @@
+package org.eclipse.fordiac.ide.export.forte_ng.simple
+
+import java.nio.file.Path
+import org.eclipse.fordiac.ide.export.forte_ng.ForteFBTemplate
+import org.eclipse.fordiac.ide.model.libraryElement.SimpleFBType
+import org.eclipse.xtend.lib.annotations.Accessors
+
+class SimpleFBHeaderTemplate extends ForteFBTemplate {
+
+	@Accessors(PROTECTED_GETTER) SimpleFBType type
+
+	new(SimpleFBType type, String name, Path prefix) {
+		super(name, prefix)
+		this.type = type
+	}
+
+	override generate() '''
+		«generateHeader»
+		
+		«generateIncludeGuardStart»
+		
+		«generateHeaderIncludes»
+		
+		class «FBClassName»: public CSimpleFB {
+		  «generateFBDeclaration»
+		
+		private:
+		  «generateFBInterfaceDeclaration»
+		
+		  «generateFBInterfaceSpecDeclaration»
+		
+		  «type.interfaceList.inputVars.generateAccessors("getDI")»
+		  «type.interfaceList.outputVars.generateAccessors("getDO")»
+		  «type.internalVars.generateAccessors("getVarInternal")»
+		  «(type.interfaceList.sockets + type.interfaceList.plugs).toList.generateAccessors»
+		
+		  «generateAlgorithms»
+		
+		  FORTE_FB_DATA_ARRAY(«type.interfaceList.eventOutputs.size», «type.interfaceList.inputVars.size», «type.interfaceList.outputVars.size», «type.interfaceList.sockets.size + type.interfaceList.plugs.size»);
+		
+		public:
+		  «FBClassName»(CStringDictionary::TStringId pa_nInstanceNameId, CResource *pa_poSrcRes) : 
+		       CSimpleFB(pa_poSrcRes, &scm_stFBInterfaceSpec, pa_nInstanceNameId, «IF !type.internalVars.empty»&scm_stInternalVars«ELSE»nullptr«ENDIF», m_anFBConnData, m_anFBVarsData) {
+		  };
+		
+		  virtual ~«FBClassName»() = default;
+		};
+		
+		«generateIncludeGuardEnd»
+		
+	'''
+
+	override protected CharSequence generateHeaderIncludes() '''
+		#include "simplefb.h"
+		«(type.interfaceList.inputVars + type.interfaceList.outputVars + type.internalVars).generateTypeIncludes»
+		«(type.interfaceList.sockets + type.interfaceList.plugs).generateAdapterIncludes»
+		
+		«type.compilerInfo?.header»
+	'''
+
+	def protected CharSequence generateAlgorithms() '''
+		void alg_REQ(void);
+	'''
+}
diff --git a/plugins/org.eclipse.fordiac.ide.export.forte_ng/src/org/eclipse/fordiac/ide/export/forte_ng/simple/SimpleFBImplTemplate.xtend b/plugins/org.eclipse.fordiac.ide.export.forte_ng/src/org/eclipse/fordiac/ide/export/forte_ng/simple/SimpleFBImplTemplate.xtend
new file mode 100644
index 0000000..d32a15e
--- /dev/null
+++ b/plugins/org.eclipse.fordiac.ide.export.forte_ng/src/org/eclipse/fordiac/ide/export/forte_ng/simple/SimpleFBImplTemplate.xtend
@@ -0,0 +1,50 @@
+package org.eclipse.fordiac.ide.export.forte_ng.simple
+
+import java.nio.file.Path
+import org.eclipse.fordiac.ide.export.forte_ng.ForteFBTemplate
+import org.eclipse.fordiac.ide.export.forte_ng.st.STAlgorithmFilter
+import org.eclipse.fordiac.ide.model.libraryElement.Algorithm
+import org.eclipse.fordiac.ide.model.libraryElement.STAlgorithm
+import org.eclipse.fordiac.ide.model.libraryElement.SimpleFBType
+import org.eclipse.xtend.lib.annotations.Accessors
+
+class SimpleFBImplTemplate extends ForteFBTemplate {
+
+	@Accessors(PROTECTED_GETTER) SimpleFBType type
+	extension STAlgorithmFilter stAlgorithmFilter = new STAlgorithmFilter
+
+	new(SimpleFBType type, String name, Path prefix) {
+		super(name, prefix)
+		this.type = type
+	}
+
+	override generate() '''
+		«generateHeader»
+		
+		«generateImplIncludes»
+		
+		«generateFBDefinition»
+		
+		«generateFBInterfaceDefinition»
+		
+		«generateFBInterfaceSpecDefinition»
+		
+		«generateAlgorithms»
+		
+	'''
+
+	def protected CharSequence generateAlgorithms() '''
+		«type.algorithm.generateAlgorithm»
+	'''
+
+	def protected dispatch CharSequence generateAlgorithm(Algorithm alg) {
+		errors.add('''Cannot export algorithm «alg.class»''')
+		return ""
+	}
+
+	def protected dispatch CharSequence generateAlgorithm(STAlgorithm alg) '''
+		void «FBClassName»::alg_«alg.name»(void) {
+		  «alg.generate(errors)»
+		}
+	'''
+}