summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schanda <schanda@itestra.de>2013-01-17 15:48:03 +0100
committerJohannes Schanda <schanda@itestra.de>2013-01-17 15:48:03 +0100
commit9462018f7d0801a2d3f6ef51393602acd3a9660e (patch)
tree3949a8b60cb067fcab93d656262ebe63c3a9f024
parentcadc31be8371193164f5ac088a6af0d866511419 (diff)
downloadgenivi-common-api-runtime-9462018f7d0801a2d3f6ef51393602acd3a9660e.tar.gz
New Variant generation
-rw-r--r--org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FTypeCollectionGenerator.xtend7
-rw-r--r--org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FTypeCommonAreaGenerator.xtend82
-rw-r--r--org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FTypeGenerator.xtend4
3 files changed, 90 insertions, 3 deletions
diff --git a/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FTypeCollectionGenerator.xtend b/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FTypeCollectionGenerator.xtend
index 7f981d1..d4fae32 100644
--- a/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FTypeCollectionGenerator.xtend
+++ b/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FTypeCollectionGenerator.xtend
@@ -12,6 +12,7 @@ import org.franca.core.franca.FTypeCollection
class FTypeCollectionGenerator {
@Inject private extension FTypeGenerator
+ @Inject private extension FTypeCommonAreaGenerator
@Inject private extension FrancaGeneratorExtensions
def generate(FTypeCollection fTypeCollection, IFileSystemAccess fileSystemAccess) {
@@ -56,6 +57,12 @@ class FTypeCollectionGenerator {
} // namespace «fTypeCollection.name»
«fTypeCollection.model.generateNamespaceEndDeclaration»
+
+ namespace CommonAPI {
+
+ «fTypeCollection.generateTypeWriters»
+
+ }
#endif // «fTypeCollection.defineName»_H_
'''
diff --git a/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FTypeCommonAreaGenerator.xtend b/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FTypeCommonAreaGenerator.xtend
new file mode 100644
index 0000000..9dfe12b
--- /dev/null
+++ b/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FTypeCommonAreaGenerator.xtend
@@ -0,0 +1,82 @@
+/* Copyright (C) 2013 BMW Group
+ * Author: Manfred Bathelt (manfred.bathelt@bmw.de)
+ * Author: Juergen Gehring (juergen.gehring@bmw.de)
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+package org.genivi.commonapi.core.generator
+
+
+import javax.inject.Inject
+import org.franca.core.franca.FEnumerationType
+import org.franca.core.franca.FModelElement
+import static org.genivi.commonapi.core.generator.FTypeGenerator.*
+import org.franca.core.franca.FTypeCollection
+import org.franca.core.franca.FType
+import org.franca.core.franca.FModel
+import java.util.List
+
+class FTypeCommonAreaGenerator {
+ @Inject private extension FrancaGeneratorExtensions
+
+ def private getClassNamespaceWithName(FModelElement child, String name, FModelElement parent, String parentName) {
+ var reference = name
+ if (parent != null && parent != child)
+ reference = parentName + '::' + reference
+ return reference
+ }
+
+ def private isFEnumerationType(FType fType) {
+ return fType instanceof FEnumerationType
+ }
+
+ def private getFEnumerationType(FType fType) {
+ return fType as FEnumerationType
+ }
+
+ def generateTypeWriters(FTypeCollection fTypes) '''
+ «FOR type: fTypes.types»
+ «IF type.isFEnumerationType»
+ «generateTypeWriterImplementation(type.getFEnumerationType, type.name, fTypes, fTypes.name)»
+ «ENDIF»
+ «ENDFOR»
+ '''
+ def private List<String> getNamespaceAsList(FModel fModel) {
+ newArrayList(fModel.name.split("\\."))
+ }
+
+ def FModel getModel(FModelElement fModelElement) {
+ if (fModelElement.eContainer instanceof FModel)
+ return (fModelElement.eContainer as FModel)
+ return (fModelElement.eContainer as FModelElement).model
+ }
+
+ def generateTypeWriterImplementation(FEnumerationType fEnumerationType, String enumerationName, FModelElement parent, String parentName) '''
+ template<>
+ struct BasicTypeWriter<«parent.model.namespaceAsList.join("::") + "::" + fEnumerationType.getClassNamespaceWithName(enumerationName, parent, parentName)»> {
+ inline static void writeType (CommonAPI::TypeOutputStream& typeStream) {
+ typeStream.«fEnumerationType.generateTypeOutput»;
+ }
+ };
+ '''
+
+ def private generateTypeOutput(FEnumerationType fEnumerationType) {
+ if (fEnumerationType.backingType.primitiveTypeName.equals("int8_t")) {
+ return "writeInt8EnumType()";
+ } else if (fEnumerationType.backingType.primitiveTypeName.equals("int16_t")) {
+ return "writeInt16EnumType()";
+ } else if (fEnumerationType.backingType.primitiveTypeName.equals("int32_t")) {
+ return "writeInt32EnumType()";
+ } else if (fEnumerationType.backingType.primitiveTypeName.equals("int64_t")) {
+ return "writeInt64EnumType()";
+ } else if (fEnumerationType.backingType.primitiveTypeName.equals("uint8_t")) {
+ return "writeUInt8EnumType()";
+ } else if (fEnumerationType.backingType.primitiveTypeName.equals("uint16_t")) {
+ return "writeUInt16EnumType()";
+ } else if (fEnumerationType.backingType.primitiveTypeName.equals("uint32_t")) {
+ return "writeUInt32EnumType()";
+ } else if (fEnumerationType.backingType.primitiveTypeName.equals("uint64_t")) {
+ return "writeUInt64EnumType()";
+ }
+ }
+} \ No newline at end of file
diff --git a/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FTypeGenerator.xtend b/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FTypeGenerator.xtend
index 5af6e6e..3e1ccd7 100644
--- a/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FTypeGenerator.xtend
+++ b/org.genivi.commonapi.core/src/org/genivi/commonapi/core/generator/FTypeGenerator.xtend
@@ -113,7 +113,7 @@ class FTypeGenerator {
return static_cast<«fEnumerationType.backingType.primitiveTypeName»>(lhs) < static_cast<«fEnumerationType.backingType.primitiveTypeName»>(rhs);
}
};
-
+
«FOR base : fEnumerationType.baseList BEFORE "\n" SEPARATOR "\n"»
«fEnumerationType.generateInlineOperatorWithName(enumerationName, base, parent, parentName, "==")»
«fEnumerationType.generateInlineOperatorWithName(enumerationName, base, parent, parentName, "!=")»
@@ -121,8 +121,6 @@ class FTypeGenerator {
'''
def dispatch generateFTypeInlineImplementation(FUnionType fUnionType, FModelElement parent) ''' '''
-
-
def dispatch generateFTypeImplementation(FTypeDef fTypeDef, FModelElement parent) ''''''
def dispatch generateFTypeImplementation(FArrayType fArrayType, FModelElement parent) ''''''
def dispatch generateFTypeImplementation(FMapType fMap, FModelElement parent) ''''''