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)»
+ }
+ '''
+}