%selectfile NULL_FILE
%if EXISTS("_PRM_CONSTANT_") == 0
%assign _PRM_CONSTANT_ = 1
%include "prm_cacheutils.tlc"
%function SLibCacheConstPrmBuffers(startIdx) void
%<SLibCacheUnstructuredConstantPrmBuffers(startIdx)>
%<FcnCacheRLSConstants()>
%<SLibCreatePrmBuffer("Const", "Typedef")>
%<SLibCreatePrmBuffer("Const", "Instance")>
%<SLibCreatePrmBuffer("Const", "MacroDecl")>
%assign result = FcnGenConstPrmBuffers(startIdx)
%<SLibSetPrmBufferPart("Const", "Typedef", "Code", result[0])>
%<SLibSetPrmBufferPart("Const", "Instance", "Code", result[1])>
%<SLibSetPrmBufferPart("Const", "MacroDecl", "Code", result[2])>
%endfunction
%function SLibGenConstParamInSharedLocation(mdlParam) void
%if (SLibGetWidthOfValueFromParamRec(mdlParam) < 1) || (LibBlockParameterWidth(mdlParam) < 1)
%return TLC_FALSE
%endif
%if (mdlParam.WasAccessedAsVariable || ::CompiledModel.PadderActive)
%return ISFIELD(mdlParam, "FirstInstanceConstIdx")
%endif
%return TLC_FALSE
%endfunction
%function SLibGenConstParamIsRLSConstant(mdlParam) void
%if (SLibGetWidthOfValueFromParamRec(mdlParam) < 1) || (LibBlockParameterWidth(mdlParam) < 1)
%return TLC_FALSE
%endif
%if (mdlParam.WasAccessedAsVariable || ::CompiledModel.PadderActive)
%return ISFIELD(mdlParam, "RLSConstant")
%endif
%return TLC_FALSE
%endfunction
%function SLibConstParamReferencedOnlyBySharedFcn(mdlParam) void
%return ISFIELD(mdlParam, "ReferencedOnlyByRLS") && mdlParam.ReferencedOnlyByRLS
%endfunction
%function SLibConstParamAccessedOutsideSharedFcn(mdlParam) void
%return ISFIELD(mdlParam, "AccessedOutsideRLS") && mdlParam.AccessedOutsideRLS
%endfunction
%function SLibConstParamReferencedSystem(mdlParam, sysIdx) void
%if !ISFIELD(mdlParam, "RLSReferences")
%return TLC_FALSE
%endif
%foreach refIdx = SIZE(mdlParam.RLSReferences, 1)
%if mdlParam.RLSReferences[refIdx] == sysIdx
%return TLC_TRUE
%endif
%endforeach
%return TLC_FALSE
%endfunction
%function FcnGenConstPrmBuffersHelper(startIdx, numPrms, hasElement)
%assign result = ["", "", "", -1]
%assign typedefBuffer = ""
%assign instBuffer = ""
%assign macroBuffer = ""
%assign structIsEmpty = TLC_TRUE
%assign hasUnconditionalElement = TLC_FALSE
%assign dummyElementName = "_rt_unused"
%assign prevInstEndIf = ""
%assign alignment = -1
%foreach prmIdx = numPrms
%assign mdlParam = Parameter[startIdx+prmIdx]
%assign vcRecord = SLibGetDataInlineVariantNetConditions(mdlParam)
%assign ifCond = vcRecord.ifCond
%assign ifEndCond = vcRecord.endIfCond
%if SLibGenConstParamIsRLSConstant(mdlParam)
%continue
%endif
%if SLibGenConstParamInSharedLocation(mdlParam)
%if (ISFIELD(mdlParam, "MacroAccessAsVector") || ...
ISFIELD(mdlParam, "MacroAccessAsMatrix"))
%assert SLibGenMacroForPrm(mdlParam)
%assign pMacroDecl = FcnGenOneConstPrmMacroDecl(mdlParam, TLC_TRUE)
%openfile macroDecl
%if !WHITE_SPACE(pMacroDecl)
%<ifCond>
%<pMacroDecl>
%<ifEndCond>
%endif
%closefile macroDecl
%assign macroBuffer = macroBuffer + macroDecl
%endif
%continue
%endif
%assign locResult = SLibGenBuffersForOneConstPrm(mdlParam)
%assign typedefPart = locResult[0]
%assign instPart = locResult[1]
%assign macroPart = locResult[2]
%if !ISEMPTY(typedefPart)
%assert (!ISEMPTY(instPart))
%openfile guardedTypedefPart
%<ifCond>
%<typedefPart>
%if ISEMPTY(ifCond)
%assign hasUnconditionalElement = TLC_TRUE
%else
#define %<hasElement>
%endif
%<ifEndCond>
%closefile guardedTypedefPart
%assign typedefBuffer = typedefBuffer + guardedTypedefPart
%openfile guardedInstPart
%if structIsEmpty
%assign structIsEmpty = TLC_FALSE
%else
,
%endif
%<prevInstEndIf>/
%<ifCond>
%<instPart>/
%closefile guardedInstPart
%assign instBuffer = instBuffer + guardedInstPart
%assign prevInstEndIf = ifEndCond
%endif
%if !ISEMPTY(macroPart)
%openfile guardedMacroPart
%<ifCond>
%<macroPart>
%<ifEndCond>
%closefile guardedMacroPart
%assign macroBuffer = macroBuffer + guardedMacroPart
%endif
%if mdlParam.Alignment > alignment
%assign alignment = mdlParam.Alignment
%endif
%endforeach
%if !WHITE_SPACE(typedefBuffer)
%if !hasUnconditionalElement
%openfile unConditionalTypedefBuffer
#ifndef %<hasElement>
char %<dummyElementName>;
#endif
%closefile unConditionalTypedefBuffer
%assign typedefBuffer = typedefBuffer + unConditionalTypedefBuffer
%endif
%endif
%if !WHITE_SPACE(instBuffer)
%openfile finalInstPart
%if hasUnconditionalElement
%<prevInstEndIf>
%else
,
%<prevInstEndIf>
#ifndef %<hasElement>
0
#endif
%endif
%closefile finalInstPart
%assign instBuffer = instBuffer + finalInstPart
%endif
%assign result[0] = typedefBuffer
%undef typedefBuffer
%assign result[1] = instBuffer
%undef instBuffer
%assign result[2] = macroBuffer
%undef macroBuffer
%assign result[3] = alignment
%return result
%endfunction
%function FcnGenConstPrmBuffers(startIdx) void
%assign result = ["", "", "", -1]
%if NumConstPrms == 0
%return result
%endif
%assign constParamVarGroupIndex = System[NumSystems-1].ConstParameterVarGroupIndex[0]
%assign hasElement = VarGroups.VarGroup[constParamVarGroupIndex].HasElement
%assign tmpResult = FcnGenConstPrmBuffersHelper(...
startIdx, NumConstPrms, hasElement)
%assign typedefBuffer = tmpResult[0]
%assign instBuffer = tmpResult[1]
%assign macroBuffer = tmpResult[2]
%assign alignment = tmpResult[3]
%undef tmpResult
%if !WHITE_SPACE(typedefBuffer)
%assign align = ""
%if !fieldDAFlag.supported && alignment > 0
%assert structDAFlag.supported
%assign align = SLibGetAlignmentSyntax(::CompiledModel.Name, ::tConstParamType, ...
"", alignment, "DATA_ALIGNMENT_WHOLE_STRUCT")
%endif
%openfile tmpBuf
%if align != ""
%switch structDAFlag.position
%case "DATA_ALIGNMENT_PREDIRECTIVE"
typedef %<align> struct {
%<typedefBuffer>
} %<::tConstParamType>;
%break
%case "DATA_ALIGNMENT_POSTDIRECTIVE"
typedef struct {
%<typedefBuffer>
} %<::tConstParamType> %<align>;
%break
%case "DATA_ALIGNMENT_PRECEDING_STATEMENT"
%<align>
typedef struct {
%<typedefBuffer>
} %<::tConstParamType>;
%break
%case "DATA_ALIGNMENT_FOLLOWING_STATEMENT"
typedef struct {
%<typedefBuffer>
} %<::tConstParamType>;
%<align>
%break
%endswitch
%else
typedef struct {
%<typedefBuffer>
} %<::tConstParamType>;
%endif
%closefile tmpBuf
%assign typedefBuffer = tmpBuf
%endif
%if !WHITE_SPACE(instBuffer)
%openfile definition
%assign ptrDataInit = SLibGetBusPointerDataInitBuf()
%if !WHITE_SPACE(ptrDataInit)
%<ptrDataInit>
%endif
%assign cpType = SLibGetModelTypesNamespacePrefix() + ::tConstParamType
%if SLibAutosarCompilerAbstractionRequired()
%<SLibAutosarCompilerAbstractionForDataDecl(TLC_TRUE, cpType, TLC_FALSE, TLC_FALSE, ::tConstParamStruct, "DataGlobal")> = {
%<instBuffer>
};/
%else
%assign qualifiers = SLibGetConstParamQualifiers()
%<qualifiers> %<cpType> %<::tConstParamStruct> = {
%<instBuffer>
};/
%endif
%closefile definition
%openfile instBuffer
%<SLibAddPreStructDeclarePragma(::tConstParamStruct)>/
%<SLibApplyMemSecToDataDefn(definition, ...
"MemSecDataConstants", "%<::tConstParamStruct>")>/
%<SLibAddPostStructDeclarePragma(::tConstParamStruct)>/
%closefile instBuffer
%endif
%assign result[0] = typedefBuffer
%undef typedefBuffer
%assign result[1] = instBuffer
%undef instBuffer
%assign result[2] = macroBuffer
%undef macroBuffer
%return result
%endfunction
%function SLibGenBuffersForOneConstPrm(mdlParam) void
%assign result = ["", "", ""]
%assign inConstParamStruct = TLC_FALSE
%if (SLibGetWidthOfValueFromParamRec(mdlParam) < 1) || (LibBlockParameterWidth(mdlParam) < 1)
%return result
%endif
%assign defnComment = SLibGenModelPrmDefnComment(mdlParam)
%if (mdlParam.WasAccessedAsVariable || ::CompiledModel.PadderActive)
%assign retVal = FcnGenOneConstPrmDeclAndInit(mdlParam)
%assign pDecl = retVal[0]
%assign pInst = retVal[1]
%openfile declBuffer
%if !WHITE_SPACE(pDecl)
/* %<defnComment> */
%assign traceMarker = ""
%if ISFIELD(mdlParam, "GraphicalSource")
%assign traceMarker = SLibAddBlockTrace("%<SLibGrBlockName(mdlParam.GraphicalSource)>")
%<SLibTraceBegin(traceMarker)>
%endif
%<pDecl>
%if mdlParam.Padding != 0
%assign optPadWidth = LibOptionalVectorWidth(mdlParam.Padding)
char pad_%<LibGetRecordIdentifier(mdlParam)>%<optPadWidth>;/
%endif
%assign inConstParamStruct = TLC_TRUE
%<SLibTraceEnd(traceMarker)>/
%endif
%closefile declBuffer
%assign result[0] = declBuffer
%openfile instBuffer
%if !WHITE_SPACE(pInst)
%assert inConstParamStruct
/* %<defnComment> */
%<pInst>/
%if mdlParam.Padding != 0
,
%if mdlParam.Padding == 1
%assign padInit = "'a'"
%else
%assign padInit = "{"
%foreach loopIdx = mdlParam.Padding
%assign padInit = padInit + "'a'"
%if loopIdx != mdlParam.Padding-1
%assign padInit = padInit + ","
%endif
%endforeach
%assign padInit = padInit +"}"
%endif
%<padInit>/
%endif
%closefile instBuffer
%endif
%assign result[1] = instBuffer
%endif
%if (ISFIELD(mdlParam, "MacroAccessAsVector") || ...
ISFIELD(mdlParam, "MacroAccessAsMatrix"))
%assert SLibGenMacroForPrm(mdlParam)
%assign pMacroDecl = FcnGenOneConstPrmMacroDecl(mdlParam, inConstParamStruct)
%openfile macroBuffer
%if !WHITE_SPACE(pMacroDecl)
%if !inConstParamStruct
/* %<defnComment> */
%endif
%<pMacroDecl>
%endif
%closefile macroBuffer
%assign result[2] = macroBuffer
%endif
%return result
%endfunction
%function FcnGenOneConstPrmDeclAndInit(mdlParam) void
%switch mdlParam.StorageClass
%case "Auto"
%break
%case "Auto_SFCN"
%case "ExportedGlobal"
%case "ImportedExtern"
%case "ImportedExternPointer"
%case "Custom"
%default
%assign errTxt = "Unhandled const model parameter type"
%<LibReportFatalError(errTxt)>
%endswitch
%assign pName = LibGetRecordIdentifier(mdlParam)
%assign useStdContainerName = TLC_FALSE
%if SLibIsNdIndexingFeatureOn() || SLibIsContainerCGTypeND(mdlParam)
%assign optDims = LibGetRecordVectorDims(mdlParam)
%elseif LibDataTypeIsContainerClass(mdlParam)
%assign optDims = ""
%else
%assign width = LibBlockParameterWidth(mdlParam)
%assign optDims = LibOptionalVectorWidth(width)
%if !ISEMPTY(optDims) && SLibIsContainerCGTypeStdContainer(mdlParam)
%assign optDims = ""
%assign useStdContainerName = TLC_TRUE
%endif
%endif
%assign dataType = SLibGetRecordContainerOptStdTypeName(mdlParam, useStdContainerName)
%assign align=""
%if mdlParam.Alignment > 0 && fieldAlign
%assign align = SLibGetAlignmentSyntax(LibGetModelName(), pName, ...
dataType, mdlParam.Alignment, "DATA_ALIGNMENT_STRUCT_FIELD")
%endif
%assign declStr = "%<align> %<dataType> %<pName>%<optDims>;"
%assign traceMarker = SLibAddTrace2("ModelElemCategory", "%<SLibGetModelElemCategoryForParam(mdlParam)>", "StorageClass", "%<mdlParam.StorageClass>")
%assign declStr = "%<SLibTraceBegin(traceMarker)> %<declStr> %<SLibTraceEnd(traceMarker)>"
%assign initStr = SLibGetFormattedPrmValue(mdlParam, "")
%assign result = ["", ""]
%assign result[0] = declStr
%assign result[1] = initStr
%return result
%endfunction
%function FcnGenOneConstPrmMacroDecl(mdlParam, inConstParamStruct) void
%assign prmSize = SLibGetSizeOfValueFromParamRec(mdlParam)
%assign nRows = prmSize[0]
%assign nCols = prmSize[1]
%assign numEls = nRows * nCols
%assign complex = LibGetRecordIsComplex(mdlParam)
%assign genVect = ISFIELD(mdlParam, "MacroAccessAsVector") && (numEls > 0)
%assign genMat = ISFIELD(mdlParam, "MacroAccessAsMatrix") && ...
((genVect && (numEls > 1)) || (!genVect && (numEls > 0)))
%openfile macroBuffer
%if genVect
%foreach elIdx = numEls
%assign macStr = SLibGenMacroStrForModelPrm(mdlParam, ...
[%<elIdx>], complex, tRealPart, "Vector")
%assign macVal = FcnGenValStrForMacroDefn(mdlParam, ...
[%<elIdx>], complex, tRealPart, inConstParamStruct, TLC_FALSE)
#define %<macStr> (%<macVal>)
%if complex
%assign macStr = SLibGenMacroStrForModelPrm(mdlParam, ...
[%<elIdx>], complex, tImagPart, "Vector")
%assign macVal = FcnGenValStrForMacroDefn(mdlParam, ...
[%<elIdx>], complex, tImagPart, inConstParamStruct, TLC_FALSE)
#define %<macStr> (%<macVal>)
%endif
%endforeach
%endif
%if genMat
%foreach rIdx = nRows
%foreach cIdx = nCols
%assign macStr = SLibGenMacroStrForModelPrm(mdlParam, ...
[%<rIdx>, %<cIdx>], complex, tRealPart, "Matrix")
%assign macVal = FcnGenValStrForMacroDefn(mdlParam, ...
[%<rIdx>, %<cIdx>], complex, tRealPart, inConstParamStruct, TLC_TRUE)
#define %<macStr> (%<macVal>)
%if complex
%assign macStr = SLibGenMacroStrForModelPrm(mdlParam, ...
[%<rIdx>, %<cIdx>], complex, tImagPart, "Matrix")
%assign macVal = FcnGenValStrForMacroDefn(mdlParam, ...
[%<rIdx>, %<cIdx>], complex, tImagPart, inConstParamStruct, TLC_TRUE)
#define %<macStr> (%<macVal>)
%endif
%endforeach
%endforeach
%endif
%closefile macroBuffer
%return macroBuffer
%endfunction
%function FcnGenValStrForMacroDefn(mdlParam, indices, complex, reim, ...
inConstParamStruct, isMatrixAccess) void
%if inConstParamStruct
%assign retValStr = FcnGenMacroValStrFromVariableDefn(mdlParam, indices, ...
complex, reim, isMatrixAccess)
%else
%if isMatrixAccess
%assign retValStr = FcnGetModelMatrixPrmVal(mdlParam, indices[0], ...
indices[1], complex, reim)
%else
%assign retValStr = FcnGetModelVectPrmVal(mdlParam, "", indices[0], ...
complex, reim)
%endif
%endif
%assign LengthOfRetVal = SIZE(retValStr)
%assign retVal = ""
%assign hasBracket = (retValStr[0] == "(")
%if LengthOfRetVal[1] > 3 && hasBracket
%assign retVal = retValStr[1]
%foreach idx = LengthOfRetVal[1] -3
%assign retVal = "%<retVal>%"
%endforeach
%else
%assign retVal = retValStr
%endif
%if hasBracket
%assign retValWithReplacementType = "(" + GET_TYPE_ID_REPLACEMENT(retVal) + ")"
%else
%assign retValWithReplacementType = GET_TYPE_ID_REPLACEMENT(retVal)
%endif
%return retValWithReplacementType
%endfunction
%function FcnGenMacroValStrFromVariableDefn(mdlParam, indices, complex, ...
reim, isMatrixAccess) void
%assign trailStr = ""
%if complex
%if reim == tRealPart
%assign trailStr = ".re"
%elseif reim == tImagPart
%assign trailStr = ".im"
%endif
%endif
%assign idxStr = ""
%assign prmSize = SLibGetSizeOfValueFromParamRec(mdlParam)
%assign nRows = prmSize[0]
%assign nCols = prmSize[1]
%if (nRows > 1) || (nCols > 1)
%if isMatrixAccess
%assign rIdx = indices[0]
%assign cIdx = indices[1]
%assign idxStr = "[%<cIdx>*%<nRows>+%<rIdx>]"
%else
%assign idxStr = "[%]"
%endif
%endif
%if SLibGenConstParamInSharedLocation(mdlParam)
%assign firstInstanceParam = ::CompiledModel.ModelParameters.Parameter[mdlParam.FirstInstanceConstIdx]
%assign nameStr = "%<tUnstructConstParameters>_%<firstInstanceParam.ChecksumName>"
%else
%assign nameStr = "%<::tConstParamStruct>.%<LibGetRecordIdentifier(mdlParam)>"
%endif
%assign retStr = "%<nameStr>%<idxStr>%<trailStr>"
%return retStr
%endfunction
%function FcnGetConstPDefGenerated(mdlParam)
%return ISFIELD(mdlParam, "ConstPDefGenerated") && mdlParam.ConstPDefGenerated
%endfunction
%function FcnGetConstPModelDeclGenerated(mdlParam)
%return ISFIELD(mdlParam, "ConstPModelDeclGenerated") && mdlParam.ConstPModelDeclGenerated
%endfunction
%function FcnGetConstPSharedFcnDeclsGenerated(mdlParam)
%return ISFIELD(mdlParam, "ConstPSharedFcnDeclsGenerated") && mdlParam.ConstPSharedFcnDeclsGenerated
%endfunction
%function FcnCacheRLSConstants() void
%foreach prmIdx = NumConstPrms
%assign prm = Parameter[prmIdx]
%if !ISFIELD(prm,"RLSConstant")
%continue
%endif
%if (!prm.WasAccessedAsVariable && !::CompiledModel.PadderActive)
%continue
%endif
%assign paramName = "rtCP_%<prm.Identifier>"
%assign dataType = SLibGetRecordContainerOptStdTypeName(prm, TLC_TRUE)
%if SLibIsNdIndexingFeatureOn() || SLibIsContainerCGTypeND(prm)
%assign optDims = LibGetRecordVectorDims(prm)
%elseif LibDataTypeIsContainerClass(prm) || ...
SLibIsContainerCGTypeStdContainer(prm)
%assign optDims = ""
%else
%assign width = LibBlockParameterWidth(prm)
%assign optDims = LibOptionalVectorWidth(width)
%endif
%assign decls = FcnGenOneConstPrmDeclAndInit(prm)
%assign lhs = "const %"
%assign lhs = CGMODEL_ACCESS("String.stripLastOf", lhs, ";")
%assign rhs = decls[1]
%assign paramDecl = "%<lhs> = %<rhs>;"
%assign sysIdx = prm.RLSReference
%assign system = System[sysIdx]
%openfile declBuffer
%<paramDecl>
%closefile declBuffer
%<LibAddToSystemField(system, "RLSConstantDecl", declBuffer)>
%endforeach
%endfunction
%function SLibCacheUnstructuredConstantPrmBuffers(startIdx) void
%<SLibCreatePrmBuffer("UnstructuredConstant", "MacroDecl")>
%<SLibCreatePrmBuffer("UnstructuredConstant", "ExternDecl")>
%createrecord objInfoArr { NumInfo 0 }
%assign definesBuffer = ""
%assign externsBuffer = ""
%createrecord objInfo { name ""; ...
kind "constpdef"; ...
manglename ""; ...
file "const_params.c"; ...
checksum 0; ...
definition ""; ...
dependencies ""; ...
builtin 0; ...
isComplex 0; ...
isMultiword 0; ...
isStdString 0; ...
aliasedType ""; ...
Width ""; ...
InitStr ""; ...
dataType ""; ...
ParamPrefix "%<tUnstructConstParameters>_"; ...
isStdArray 0; ...
isStdVector 0; ...
isHalfPrecision 0 }
%assign numConstants = 0
%assign checkSumList = []
%foreach prmIdx = NumConstPrms
%assign mdlParam = Parameter[startIdx + prmIdx]
%if !SLibGenConstParamInSharedLocation(mdlParam)
%continue
%endif
%if !::CompiledModel.HasSharedConstants
%assign ::CompiledModel.HasSharedConstants = TLC_TRUE
%endif
%assign firstInstanceParam = Parameter[mdlParam.FirstInstanceConstIdx]
%assign paramDefGenerated = FcnGetConstPDefGenerated(firstInstanceParam)
%if !SLibConstParamReferencedOnlyBySharedFcn(firstInstanceParam) && ...
SLibConstParamAccessedOutsideSharedFcn(mdlParam)
%assign comment = SLibGenModelPrmDefnComment(mdlParam)
%if ISFIELD(mdlParam,"TruncatedId")
%assign macroStr = "%<mdlParam.TruncatedId>"
%assign definesBuffer = definesBuffer + "#define %<macroStr> rtCP_%<firstInstanceParam.ChecksumName>/* %<comment> *//n"
%else
%assign identifier = "rtCP_" + LibGetRecordIdentifier(mdlParam)
%assign remLength = ::CompiledModel.ConfigSet.MaxIdLength
%if SIZE(identifier)[1] <= remLength
%assign truncatedMdlPrm = identifier
%else
%assign truncatedMdlPrm = LibRequestIDWithLength(identifier, TLC_TRUE, TLC_FALSE, remLength)
%endif
%addtorecord mdlParam TruncatedId truncatedMdlPrm
%assign definesBuffer = definesBuffer + "#define %<truncatedMdlPrm> rtCP_%<firstInstanceParam.ChecksumName>/* %<comment> *//n"
%endif
%endif
%assign pName = "%<tUnstructConstParameters>_%<firstInstanceParam.ChecksumName>"
%assign dataType = SLibGetRecordContainerTypeName(firstInstanceParam)
%if SLibIsNdIndexingFeatureOn() || SLibIsContainerCGTypeND(mdlParam)
%assign optDims = LibCGTypeSymbolicVectorDims(mdlParam.CGTypeIdx)
%elseif LibDataTypeIsContainerClass(firstInstanceParam)
%assign optDims = ""
%if dataType == "std::string"
%assign objInfo.isStdString = 1
%endif
%else
%assign prmSize = SLibGetSizeOfValueFromParamRec(firstInstanceParam)
%assign nRows = prmSize[0]
%assign nCols = prmSize[1]
%assign optDims = LibOptionalMatrixDims(nRows, nCols)
%if !ISEMPTY(optDims) && ...
SLibIsContainerCGTypeStdContainer(firstInstanceParam)
%assign optDims = ""
%assign dataType = SLibGetRecordContainerOptStdTypeName(firstInstanceParam, TLC_TRUE)
%if SLibIsMatrixUsingStdArray()
%assign objInfo.isStdArray = 1
%else
%assign objInfo.isStdVector = 1
%endif
%endif
%endif
%assign externDecl = "extern const %<dataType> %<pName>%<optDims>;"
%assign varGroup = VarGroups.VarGroup[mdlParam.VarGroupIdx[0]]
%assign traceMarker = SLibAddTrace2("ModelElemCategory", "%<SLibGetModelElemCategoryForParam(mdlParam)>", "StorageClass", "%<SLibGetVarGroupStorageClass(varGroup)>")
%assign externDecl = "%<SLibTraceBegin(traceMarker)> %<externDecl> %<SLibTraceEnd(traceMarker)>"
%if !SLibConstParamReferencedOnlyBySharedFcn(firstInstanceParam) && ...
!FcnGetConstPModelDeclGenerated(firstInstanceParam)
%assign externsBuffer = externsBuffer + "%<externDecl>"
%addtorecord firstInstanceParam ConstPModelDeclGenerated 1
%endif
%if !FcnGetConstPSharedFcnDeclsGenerated(firstInstanceParam)
%foreach refIdx = SIZE(firstInstanceParam.RLSReferences, 1)
%assign sysIdx = firstInstanceParam.RLSReferences[refIdx]
%assign system = System[sysIdx]
%if !LibIsSystemExistingLibrary(system)
%openfile declBuffer
%<externDecl>
%closefile declBuffer
%<LibAddToSystemField(system, "SharedConstantsExterns", declBuffer)>
%endif
%endforeach
%addtorecord firstInstanceParam ConstPSharedFcnDeclsGenerated 1
%endif
%if firstInstanceParam.ConstantOnDisk || paramDefGenerated
%continue
%endif
%addtorecord firstInstanceParam ConstPDefGenerated 1
%assign dtIdx = LibGetRecordDataTypeId(firstInstanceParam)
%assign isBuiltinDataType = 0
%if LibIsFundamentalBuiltInDataType(dtIdx)
%assign isBuiltinDataType = 1
%elseif LibIsDataTypeFixpt(dtIdx) && !LibIsAliasDataType(dtIdx)
%assign isBuiltinDataType = 1
%endif
%assign dataTypeOfData = DataTypes.DataType[dtIdx]
%if isBuiltinDataType && ...
dataTypeOfData.IdAliasedThruTo >= 0 && dataTypeOfData.IdAliasedThruTo != dtIdx
%assign aliasedThruToType = DataTypes.DataType[dataTypeOfData.IdAliasedThruTo].Name
%else
%assign aliasedThruToType = ""
%endif
%assign isMultiword = LibIsDataTypeMultiWordFixpt(dtIdx)
%assign isComplex = LibGetRecordIsComplex(firstInstanceParam)
%assign isHalfPrecision = LibIsHalfDataType(dtIdx)
%assign initStr = LibParameterInstanceInitStr(firstInstanceParam)
%assign cs = firstInstanceParam.Checksum
%assign fileName = "const_params." + ::LangFileExt
%assign objInfo.name = firstInstanceParam.ChecksumName
%assign objInfo.manglename = firstInstanceParam.ChecksumName
%assign objInfo.checksum = %<cs>
%assign objInfo.dependencies = dataTypeOfData.Name
%assign objInfo.builtin = isBuiltinDataType
%assign objInfo.isComplex = isComplex
%assign objInfo.isMultiword = isMultiword
%assign objInfo.aliasedType = aliasedThruToType
%assign objInfo.isHalfPrecision = isHalfPrecision
%if SLibIsNdIndexingFeatureOn() || SLibIsContainerCGTypeND(mdlParam)
%assert TLC_FALSE
%endif
%assign objInfo.Width = optDims
%assign objInfo.InitStr = initStr
%assign objInfo.dataType = dataType
%if !ISFIELD(::CompiledModel, "RTWInfoMatFile")
%<LoadRTWInfoMatFileforTLC()>
%endif
%assign sharedHdrInfo = FEVAL("rtwprivate", "addSharedConstants2FileMap", ::CompiledModel.Name, ::CompiledModel.RTWInfoMatFile.sharedSourcesDir, objInfo, 0)
%if !sharedHdrInfo.success
%<SLibReportErrorWithIdAndArgs("RTW:buildProcess:sharedConstantsChecksumMismatch", sharedHdrInfo.badName)>
%endif
%assign numConstants = numConstants + 1
%endforeach
%undef objInfo
%<SLibSetPrmBufferPart("UnstructuredConstant", "MacroDecl", ...
"Code", definesBuffer)>
%<SLibSetPrmBufferPart("UnstructuredConstant", "ExternDecl", ...
"Code", externsBuffer)>
%assign FileName = "const_params"
%assign sourceExt = ::LangFileExt
%if numConstants > 0
%assign sharedHdrInfo = FEVAL("rtwprivate", "addSharedConstants2FileMap", ::CompiledModel.Name, ::CompiledModel.RTWInfoMatFile.sharedSourcesDir, "", 1)
%if !sharedHdrInfo.success
%<SLibReportErrorWithIdAndArgs("RTW:buildProcess:sharedConstantsChecksumMismatch", sharedHdrInfo.badName)>
%endif
%assign fileSep = FEVAL("filesep")
%openfile bannerBuff="%<::CompiledModel.RTWInfoMatFile.sharedSourcesDir>%<fileSep>%<FileName>.%<sourceExt>"
/*
* %<FileName>.%<sourceExt>
*
%<SLibCommonUtilHeaderInfo()>/
*/
%closefile bannerBuff
%assign sharedFileLocal = ::CompiledModel.LocalSharedCodeManagerFile
%assign sharedFileMaster = ::CompiledModel.MasterSharedCodeManagerFile
%assign sharedFile = ""
%if sharedFileLocal == sharedFileMaster
%assign sharedFile = sharedFileLocal
%else
%assign sharedFile = sharedFileMaster
%endif
%assign sharedHdrInfo = FEVAL("rtwprivate", "emitSharedConstants", ...
::CompiledModel.Name, ::CompiledModel.RTWInfoMatFile.sharedSourcesDir, sharedFile, "%<FileName>", 1, 1)
%assign fileSep = FEVAL("filesep")
%assign outFileName = ::CompiledModel.RTWInfoMatFile.sharedSourcesDir + fileSep + FileName + "." + ::LangFileExt
%assign unused = FEVAL("rtwprivate","cBeautifierWithOptions", outFileName , ::CompiledModel.Name)
%<SLibAddGeneratedFileToList("%<FileName>.%<sourceExt>", ...
"utility","source",::CompiledModel.GenUtilsPath)>
%elseif SLibHasSharedConstantParameters()
%<SLibAddGeneratedFileToList("%<FileName>.%<sourceExt>", ...
"utility","source",::CompiledModel.GenUtilsPath)>
%assign aFileRec = SLibGetFileRecForUtilCode("util_src", FileName)
%<LibSetSourceFileSection(aFileRec, "WrittenToDisk", TLC_TRUE)>
%endif
%endfunction
%function SLibHasSharedConstantParameters()
%return ::CompiledModel.HasSharedConstants
%endfunction
%function SLibIsUnstructuredConstParam(param)
%return param.InConstSection && SLibGenConstParamInSharedLocation(param)
%endfunction
%endif