/******************************************************************************** * Copyright (c) 2025-2026 ZF Friedrichshafen AG * * This program and the accompanying materials are made available under the * terms of the Apache License Version 2.0 which is available at * https://www.apache.org/licenses/LICENSE-2.0 * * SPDX-License-Identifier: Apache-2.0 * * Contributors: * Thomas Pfleiderer - initial API and implementation ********************************************************************************/ #ifndef VSS_CODING_H #define VSS_CODING_H #include #include #include #include #include #include #include "codegen_base.h" #include "vss_helper.h" /** * @brief VSS code generator coding class. * Creates the code out of templates */ class CVSSCodingCommon : public CCodeGeneratorBase, CVSSHelper { public: /** * @brief Constructor * @param[in] rsPrefix used by cmake library and signal definition in signal_identifier.h file */ CVSSCodingCommon(const std::string& rsPrefix) : m_ssPrefix(rsPrefix) {} /** * @brief fill the KeyWordMap with all required strings * @param[in] signal signal definition structure to fill the KeyWordMap * @param[in] mapKeywords KeyWordMap to be filled * @param[in] rsVersion optional information will be placed in the header of the files */ void GetCommonKeyWordMap(const SSignalVDDefinition& signal, CKeywordMap& mapKeywords, const std::string& rsVersion) const; /** * @brief fill the KeyWordMap with all required strings * @param[in] signal signal definition structure to fill the KeyWordMap * @param[in] mapKeywords KeyWordMap to be filled * @param[in] rsVersion optional information will be placed in the header of the files */ void GetCommonKeyWordMap(const SSignalBSDefinition& signal, CKeywordMap& mapKeywords, const std::string& rsVersion) const; /** * @brief create content of the signal_identifier.h file * @param[in] allSignals container of all signal definitions * @param[in] ssFileName file name of the signal_identifier.h file * @param[in] ssVersion optional information will be placed in the header of the files * @return content of the signal_identifier.h file */ std::string Code_SignalIdentifier(const std::vector & allSignals, const std::string& ssFileName, const std::string& ssVersion) const; /** * @brief get the version line which will be added in the header of the files * @param[in] ssVersion optional information will be placed in the header of the files * @return line for the header of the files to know the file is auto generated */ std::string Code_VSSFileVersion(const std::string& ssVersion) const; /** * @brief generates the unique define to avoid duplicate loading of a header file * @param[in] ssFileName file name which will be included in the unique define * @return unique define string */ std::string Code_SafeGuard(const std::string& ssFileName) const; /** * @brief generates the cmakelist.txt file * @param[in] targetLibName project cmake name * @param[in] targetComponentName is the name of the header and cpp file * @return content of the CMakeList.txt file */ std::string Code_CMakeProject(const std::string& targetLibName, const std::string& targetComponentName) const; protected: /** * @brief create a signal line for the signal_identifier file * @param[in] allSignals container of all signals for aligning of the string * @param[in] signal single signal the function belongs to * @param[in] func the function which should be returned in a line * @param[in] signalTitle signal title string in file signal_identifier.h * @param[in] canSignalTitle can signal title string in file signal_identifier.h * @param[in] cTypeTitle c-type title string in file signal_identifier.h * @return content of a single function for the signal_identifier file */ std::string Code_SignalIdentifierList(const std::vector & allSignals, const SSignalVDDefinition& signal, const SFunctionVDDefinition& func, const std::string& signalTitle, const std::string& canSignalTitle, const std::string& cTypeTitle) const; /** * @brief create a list of all signals for the signal_identifier file * @param[in] allSignals container of all signals * @param[in] signalTitle signal title string in file signal_identifier.h * @param[in] canSignalTitle can signal title string in file signal_identifier.h * @param[in] cTypeTitle c-type title string in file signal_identifier.h * @return content of list of all signals for the signal_identifier file */ std::string Code_AllSignalsIdentifierList(const std::vector & allSignals, const std::string& signalTitle, const std::string& canSignalTitle, const std::string& cTypeTitle) const; std::string m_ssPrefix; ///< prefix, used by cmake library and signal definition in signal_identifier.h file. }; #endif // !defined VSS_CODING_H