
io.joynr.generator.cpp.communicationmodel.StdEnumCppTemplate Maven / Gradle / Ivy
package io.joynr.generator.cpp.communicationmodel;
import com.google.inject.Inject;
import io.joynr.generator.cpp.util.CppStdTypeUtil;
import io.joynr.generator.cpp.util.JoynrCppGeneratorExtensions;
import io.joynr.generator.cpp.util.TemplateBase;
import io.joynr.generator.util.EnumTemplate;
import org.eclipse.emf.common.util.EList;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.xbase.lib.Extension;
import org.eclipse.xtext.xbase.lib.StringExtensions;
import org.franca.core.franca.FEnumerationType;
import org.franca.core.franca.FEnumerator;
@SuppressWarnings("all")
public class StdEnumCppTemplate implements EnumTemplate {
@Inject
@Extension
private TemplateBase _templateBase;
@Inject
@Extension
private CppStdTypeUtil _cppStdTypeUtil;
@Inject
@Extension
private JoynrCppGeneratorExtensions _joynrCppGeneratorExtensions;
public CharSequence generate(final FEnumerationType type) {
StringConcatenation _builder = new StringConcatenation();
final String typeName = this._joynrCppGeneratorExtensions.joynrNameStd(type);
_builder.newLineIfNotEmpty();
CharSequence _warning = this._templateBase.warning();
_builder.append(_warning, "");
_builder.newLineIfNotEmpty();
String _dllExportIncludeStatement = this._joynrCppGeneratorExtensions.getDllExportIncludeStatement();
_builder.append(_dllExportIncludeStatement, "");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("#include \"");
String _includeOfStd = this._cppStdTypeUtil.getIncludeOfStd(type);
_builder.append(_includeOfStd, "");
_builder.append("\"");
_builder.newLineIfNotEmpty();
_builder.newLine();
String _namespaceStarter = this._joynrCppGeneratorExtensions.getNamespaceStarter(type, true);
_builder.append(_namespaceStarter, "");
_builder.newLineIfNotEmpty();
_builder.newLine();
_builder.append("std::string ");
_builder.append(typeName, "");
_builder.append("::getLiteral(");
_builder.append(typeName, "");
_builder.append("::");
String _nestedEnumName = this._joynrCppGeneratorExtensions.getNestedEnumName();
_builder.append(_nestedEnumName, "");
_builder.append(" ");
String _firstLower = StringExtensions.toFirstLower(typeName);
_builder.append(_firstLower, "");
_builder.append("Value) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("std::string literal;");
_builder.newLine();
_builder.append("\t");
_builder.append("switch (");
String _firstLower_1 = StringExtensions.toFirstLower(typeName);
_builder.append(_firstLower_1, "\t");
_builder.append("Value) {");
_builder.newLineIfNotEmpty();
{
EList _enumElementsAndBaseEnumElements = this._joynrCppGeneratorExtensions.getEnumElementsAndBaseEnumElements(type);
for(final FEnumerator literal : _enumElementsAndBaseEnumElements) {
_builder.append("\t");
_builder.append("case ");
String _joynrName = this._joynrCppGeneratorExtensions.joynrName(literal);
_builder.append(_joynrName, "\t");
_builder.append(":");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("\t");
_builder.append("literal = std::string(\"");
String _joynrName_1 = this._joynrCppGeneratorExtensions.joynrName(literal);
_builder.append(_joynrName_1, "\t\t");
_builder.append("\");");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("\t");
_builder.append("break;");
_builder.newLine();
}
}
_builder.append("\t");
_builder.append("}");
_builder.newLine();
_builder.append("\t");
_builder.append("return literal;");
_builder.newLine();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("uint32_t ");
_builder.append(typeName, "");
_builder.append("::getOrdinal(");
_builder.append(typeName, "");
_builder.append("::");
String _nestedEnumName_1 = this._joynrCppGeneratorExtensions.getNestedEnumName();
_builder.append(_nestedEnumName_1, "");
_builder.append(" ");
String _firstLower_2 = StringExtensions.toFirstLower(typeName);
_builder.append(_firstLower_2, "");
_builder.append("Value) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("return static_cast(");
String _firstLower_3 = StringExtensions.toFirstLower(typeName);
_builder.append(_firstLower_3, "\t");
_builder.append("Value);");
_builder.newLineIfNotEmpty();
_builder.append("}");
_builder.newLine();
_builder.newLine();
_builder.append("// Printing ");
_builder.append(typeName, "");
_builder.append(" with google-test and google-mock.");
_builder.newLineIfNotEmpty();
_builder.append("void PrintTo(const ");
_builder.append(typeName, "");
_builder.append("::");
String _nestedEnumName_2 = this._joynrCppGeneratorExtensions.getNestedEnumName();
_builder.append(_nestedEnumName_2, "");
_builder.append("& ");
String _firstLower_4 = StringExtensions.toFirstLower(typeName);
_builder.append(_firstLower_4, "");
_builder.append("Value, ::std::ostream* os) {");
_builder.newLineIfNotEmpty();
_builder.append("\t");
_builder.append("*os << \"");
_builder.append(typeName, "\t");
_builder.append("::\" << ");
_builder.append(typeName, "\t");
_builder.append("::getLiteral(");
String _firstLower_5 = StringExtensions.toFirstLower(typeName);
_builder.append(_firstLower_5, "\t");
_builder.append("Value)");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t");
_builder.append("<< \" (\" << ");
_builder.append(typeName, "\t\t\t");
_builder.append("::getOrdinal(");
String _firstLower_6 = StringExtensions.toFirstLower(typeName);
_builder.append(_firstLower_6, "\t\t\t");
_builder.append("Value) << \")\";");
_builder.newLineIfNotEmpty();
_builder.append("}");
_builder.newLine();
_builder.newLine();
String _namespaceEnder = this._joynrCppGeneratorExtensions.getNamespaceEnder(type, true);
_builder.append(_namespaceEnder, "");
_builder.newLineIfNotEmpty();
return _builder;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy