305
%if EXISTS("_CACHE_SHAREDUTILS_LIB_") == 0
%assign _CACHE_SHAREDUTILS_LIB_ = 1
%function (name)
%if IsModelReferenceTarget() && ...
Name == ::CompiledModel.System[GetBaseSystemIdx()].Name
%assign comment = "* Created for model: %<::CompiledModel.Name>"
%else
%assign comment = "* Created for block: %<Name>"
%endif
%return comment
%endfunction
%function SLibDumpUtilsSourceCodeAndCacheFunctionPrototype(fcnName,funcProto,buffer) void
%<SLibDumpUtilsSourceCodeWithPrototypeIncludesAndCached(fcnName,funcProto,buffer,"")>
%endfunction
%function SLibDumpUtilsSourceCodeWithPrototypeIncludesAndCached(fcnName,funcProto,buffer,funcProtoIncludes) void
%<SLibDumpUtilsSourceCodeWithPrototypeIncludes(fcnName,funcProto,buffer,funcProtoIncludes)>
%if ::CompiledModel.GenUtilsSrcInSharedLocation == 0
%assign msfcn = "MemSecFuncSharedUtil"
%openfile fcnPrototype_pragma
%<SLibGetFcnMemSecPragmaOnDecl(fcnName, msfcn, "Pre")>/
%<funcProto>
%<SLibGetFcnMemSecPragmaOnDecl(fcnName, msfcn, "Post")>/
%closefile fcnPrototype_pragma
%<LibCacheFunctionPrototype(fcnPrototype_pragma)>/
%endif
%endfunction
%function SLibDumpUtilsSourceCode(fcnName,funcProto,buffer) void
%assign isRM = LibIsRowMajorLayout()
%if isRM
%if !Accelerator && !IsModelReferenceSimTarget()
%openfile funcProtoIncludesTop
%<LibDumpTopOfHdrFileUserCode()>/
%closefile funcProtoIncludesTop
%openfile funcProtoIncludesBottom
%<LibDumpBottomOfHdrFileUserCode()>/
%closefile funcProtoIncludesBottom
%elseif IsModelReferenceSimTarget()
%openfile funcProtoIncludesTop
%<LibDumpTopOfHdrFileUserCode()>/
%closefile funcProtoIncludesTop
%endif
%endif
%assign funcProtoIncludes = ""
%if EXISTS(funcProtoIncludesBottom)
%assign funcProtoIncludes = funcProtoIncludesTop + "/n" + funcProtoIncludesBottom
%elseif EXISTS(funcProtoIncludesTop)
%assign funcProtoIncludes = funcProtoIncludesTop
%endif
%<SLibDumpUtilsSourceCodeWithPrototypeIncludes(fcnName,funcProto,buffer,funcProtoIncludes)>
%endfunction
%function SLibAddMathIncludeForUtilsSourceCode(buffer) void
%assign indices = FEVAL("regexp",buffer,"(ldexp|fmod|ceil|floor)")
%if (!ISEMPTY(indices))
%endif
%endfunction
%function FcnDumpSharedUtilsIncludes()
%openfile buf
%if SIZE(::GlobalSharedUtilsIncludes, 1) > 0
%assign locGSUIncludesCache = LibPopStackSharedUtilsIncludes()
%assign nlocGSUIncludesCache = SIZE(locGSUIncludesCache,1)
%foreach idx = nlocGSUIncludesCache
%assign incFileName = locGSUIncludesCache[idx]
%if incFileName[0] == "<" || incFileName[0] == "/""
#include %<incFileName>
%else
#include "%<incFileName>"
%endif
%endforeach
%<LibPushStackSharedUtilsIncludes(locGSUIncludesCache)>
%endif
%closefile buf
%return buf
%endfunction
%function SLibDumpUtilsSourceCodeWithPrototypeIncludes(fcnName,funcProto,buffer,funcProtoIncludes) void
%if ::CompiledModel.GenUtilsSrcInSharedLocation == 1
%if !ISFIELD(::CompiledModel, "RTWInfoMatFile")
%<LoadRTWInfoMatFileforTLC()>
%endif
%assign baseFileName = "%<fcnName>"
%assign fileName = "%<::CompiledModel.RTWInfoMatFile.sharedSourcesDir>%<fcnName>"
%if FILE_EXISTS(fileName+"."+ ::LangFileExt) == 0
%openfile includeBuf
%<FcnDumpSharedUtilsIncludes()>
#include "%<fcnName>.h"
%closefile includeBuf
%openfile protectedUtilityDef
%<SLibGetFcnMemSecPragma(fcnName, "MemSecFuncSharedUtil", "Pre")>/
%<buffer>/
%<SLibGetFcnMemSecPragma(fcnName, "MemSecFuncSharedUtil", "Post")>/
%closefile protectedUtilityDef
%assign createdBycomment = locGetCreatedByComment(Name)
%openfile bannerBuf
/*
* %<fcnName>.%<LangFileExt>
*
%<SLibCommonUtilHeaderInfo()>/
%<createdBycomment>
*/
%closefile bannerBuf
%assign file = LibCreateSourceFileAtPath("Source","Simulink",fileName,baseFileName)
%<SLibSetModelFileAttribute(file, "Group", "utility")>
%<LibSetSourceFileSection(file, "Includes", includeBuf)>
%<LibSetSourceFileSection(file, "Functions", protectedUtilityDef)>
%<LibSetSourceFileSection(file, "Banner", bannerBuf)>
%<SLibSetModelFileIndent(file, TLC_TRUE)>
%<SLibSetModelFileShared(file, TLC_TRUE)>
%<SLibSetModelFileDeferredIncludeCoderTypes(file, TLC_TRUE)>
%openfile includeHBuf
#ifndef SHARE_%<fcnName>
#define SHARE_%<fcnName>
%assign rtwtypesBaseName = SLibGetFileNameForCode("rtwtypes_hdr")
%assign rtwtypesFileName = rtwtypesBaseName + ".h"
#include "%<rtwtypesFileName>"
%assign rtwCtx = ::CompiledModel.RTWContext
%assign isMultiword = SLibIsHostBasedSimulationTarget() ? ...
TLC_TRUE : ...
FEVAL("rtwprivate", "retrieveMultiWordUtilitiesAndFunctions", "%<MasterSharedCodeManagerFile>", rtwCtx, fcnName)
%if isMultiword
#include "%<SLibCoderMultiwordTypesFilename()>"
%endif
%if SLibDeclareHalfPrecisionUsage()
#include "%<SLibCoderHalfTypeHdrFilename()>"
%endif
%if ("%<funcProtoIncludes>" != "")
%<funcProtoIncludes>
%endif
%closefile includeHBuf
%openfile fcnSignature
%<SLibGetFcnMemSecPragmaOnDecl(fcnName, "MemSecFuncSharedUtil", "Pre")>/
%<funcProto>
%<SLibGetFcnMemSecPragmaOnDecl(fcnName, "MemSecFuncSharedUtil", "Post")>/
%closefile fcnSignature
%openfile fileTrailerBuf
#endif
%closefile fileTrailerBuf
%openfile bannerBuf
/*
* %<fcnName>.h
*
%<SLibCommonUtilHeaderInfo()>/
%<createdBycomment>
*/
%closefile bannerBuf
%assign file = LibCreateSourceFileAtPath("Header","Simulink",fileName,baseFileName)
%<SLibSetModelFileAttribute(file, "Group", "utility")>
%<LibSetSourceFileSection(file, "Includes", includeHBuf)>
%<LibSetSourceFileSection(file, "Declarations", fcnSignature)>
%<LibSetSourceFileSection(file, "UserBottom", fileTrailerBuf)>
%<LibSetSourceFileSection(file, "Banner", bannerBuf)>
%<SLibSetModelFileIndent(file, TLC_TRUE)>
%<SLibSetModelFileShared(file, TLC_TRUE)>
%else
%<SLibAddGeneratedFileToList(fileName+ "."+ ::LangFileExt, "utility", "source","")>
%<SLibAddGeneratedFileToList(fileName+".h", "utility", "header","")>
%endif
%else
%openfile buffer_pragmas
%<SLibGetFcnMemSecPragma(fcnName, "MemSecFuncSharedUtil", "Pre")>/
%<buffer>/
%<SLibGetFcnMemSecPragma(fcnName, "MemSecFuncSharedUtil", "Post")>/
%closefile buffer_pragmas
%<SLibCacheSourceCode(buffer_pragmas)>/
%if SIZE(::GlobalSharedUtilsIncludes, 1) > 0
%assign locGSUIncludesCache = LibPopStackSharedUtilsIncludes()
%assign nlocGSUIncludesCache = SIZE(locGSUIncludesCache,1)
%foreach idx = nlocGSUIncludesCache
%assign incFileName = locGSUIncludesCache[idx]
%assign system = ::CompiledModel.System[GetBaseSystemIdx()]
%assign moduleFileTypeIdx = ::CompiledModel.MdlHeaderFileIdx
%<FcnAppendSystemFcnHeaders(system, incFileName, moduleFileTypeIdx)>
%endforeach
%<LibPushStackSharedUtilsIncludes(locGSUIncludesCache)>
%endif
%endif
%endfunction
%function SLibDumpUtilsMacro(fcnName,buffer) void
%if ::CompiledModel.GenUtilsSrcInSharedLocation == 1
%if !ISFIELD(::CompiledModel, "RTWInfoMatFile")
%<LoadRTWInfoMatFileforTLC()>
%endif
%assign fileName = "%<::CompiledModel.RTWInfoMatFile.sharedSourcesDir>%<fcnName>_MACRO.h"
%if FILE_EXISTS("%<fileName>") == 0
%openfile filebuffer = "%<fileName>"
%<buffer>
%closefile filebuffer
%<SLibIndentFile(fileName,::CompiledModel.Name)>
%endif
%<SLibAddGeneratedFileToList(fileName,"utility","header","")>
%else
%<LibCacheDefine(buffer)>
%endif
%endfunction
%function SLibAddtoTFLSharedUtilsIncludes(incFileName) void
%if incFileName == ""
%return
%endif
%if !EXISTS(::TFLSharedUtilsInclude) || SIZE(::TFLSharedUtilsInclude,1)<1
%assign ::TFLSharedUtilsInclude = []
%endif
%assign len = SIZE(::TFLSharedUtilsInclude,1)
%assign duplicate = TLC_FALSE
%foreach idx = len
%if ::TFLSharedUtilsInclude[idx] == incFileName
%assign duplicate = TLC_TRUE
%break
%endif
%endforeach
%if (!duplicate)
%assign ::TFLSharedUtilsInclude = ::TFLSharedUtilsInclude + incFileName
%endif
%endfunction
%function LibPushStackSharedUtilsIncludes(stackVector) void
%assign ::GlobalSharedUtilsIncludes = ::GlobalSharedUtilsIncludes + ""
%assign nGlobalSharedUtilsIncludes = SIZE(::GlobalSharedUtilsIncludes,1)
%assign ::GlobalSharedUtilsIncludes[nGlobalSharedUtilsIncludes-1] = stackVector
%endfunction
%function LibPushEmptyStackSharedUtils() void
%<LibPushStackSharedUtilsIncludes("")>
%endfunction
%function LibPopStackSharedUtilsIncludes() void
%assign nGlobalSharedUtilsIncludes = SIZE(::GlobalSharedUtilsIncludes,1)
%if nGlobalSharedUtilsIncludes > 0
%assign returnVet = ::GlobalSharedUtilsIncludes[nGlobalSharedUtilsIncludes-1]
%assign tmpBuf = []
%foreach idx = nGlobalSharedUtilsIncludes-1
%assign tmpBuf = tmpBuf + ""
%assign tmpBuf[idx] = ::GlobalSharedUtilsIncludes[idx]
%endforeach
%assign ::GlobalSharedUtilsIncludes = tmpBuf
%else
%assign returnVet = []
%endif
%return returnVet
%endfunction
%function LibAddtoSharedUtilsIncludes(incFileName) void
%if SIZE(::GlobalSharedUtilsIncludes,1)<1
%<LibReportFatalError("should not get here")>
%endif
%if incFileName == ""
%return
%endif
%assign duplicate = 0
%assign nGlobalSharedUtilsIncludes = SIZE(::GlobalSharedUtilsIncludes,1)
%assign tmpBuf = ::GlobalSharedUtilsIncludes[nGlobalSharedUtilsIncludes-1]
%if ISEMPTY(tmpBuf)
%assign tmpBuf = []
%endif
%assign ntmpBuf = SIZE(tmpBuf,1)
%foreach idx = ntmpBuf
%if (tmpBuf[idx] == incFileName)
%assign duplicate = 1
%break
%endif
%endforeach
%if (!duplicate)
%assign tmpBuf = tmpBuf + incFileName
%assign ::GlobalSharedUtilsIncludes[nGlobalSharedUtilsIncludes-1] = tmpBuf
%endif
%endfunction
%function LibAddtoSharedUtilsIncludesVector(inputVet) void
%if TYPE(inputVet)=="Vector"
%assign ninputVet = SIZE(inputVet,1)
%foreach idx=ninputVet
%<LibAddtoSharedUtilsIncludes(inputVet[idx])>
%endforeach
%endif
%endfunction
%endif