%if EXISTS("_VARGROUPLIB_") == 0
%assign _VARGROUPLIB_ = 1
%function SLibVarGroupIsStruct(aVarGroupIdx) void
%assert ::CompiledModel.VarGroups.NumVarGroups > aVarGroupIdx
%assert -1 < aVarGroupIdx
%assign varGroup = ::CompiledModel.VarGroups.VarGroup[aVarGroupIdx]
%assert 0 == varGroup.PackageAsStruct || -1 < varGroup.CGTypeIdx
%return 1 == varGroup.PackageAsStruct
%endfunction
%function SLibVarGroupLocalName(aVarGroupIdx) void
%assert ::CompiledModel.VarGroups.NumVarGroups > aVarGroupIdx
%assert -1 < aVarGroupIdx
%return ::CompiledModel.VarGroups.VarGroup[aVarGroupIdx].LocalName
%endfunction
%function SLibVarGroupSystemIdx(aVarGroupIdx) void
%assert ::CompiledModel.VarGroups.NumVarGroups > aVarGroupIdx
%assert -1 < aVarGroupIdx
%return ::CompiledModel.VarGroups.VarGroup[aVarGroupIdx].SysIdx
%endfunction
%function SLibVarGroupNumElements(aVarGroupIdx) void
%assert ::CompiledModel.VarGroups.NumVarGroups > aVarGroupIdx
%assert -1 < aVarGroupIdx
%return ::CompiledModel.VarGroups.VarGroup[aVarGroupIdx].NumVarGroupElements
%endfunction
%function SLibVarGroupElementSource(aVarGroupIdx, aElementIdx) void
%assert SLibVarGroupNumElements(aVarGroupIdx) > aElementIdx
%assert -1 < aElementIdx
%return ...
::CompiledModel.VarGroups.VarGroup[aVarGroupIdx].VarGroupElements[aElementIdx]
%endfunction
%function SLibDefineVarGroupElement(aVarGroupIdx, aElementIdx) void
%assign systemIdx = SLibVarGroupSystemIdx(aVarGroupIdx)
%assign varGroupElement = SLibVarGroupElementSource(aVarGroupIdx, aElementIdx)
%assign res = SLibNeedGenDataDefFromVarGroup(varGroupElement, systemIdx)
%return TLC_TRUE == res[0] || !WHITE_SPACE(res[2])
%endfunction
%function SLibVarGroupCGTypeIdx(aVarGroupIdx) void
%assign varGroupTypeIdx = ::CompiledModel.VarGroups.VarGroup[aVarGroupIdx].CGTypeIdx
%if LibCGTypeIsMatrix(varGroupTypeIdx)
%assign varGroupTypeIdx = SLibGetBaseTypeForVarGroupUsedAsMatrix(varGroupTypeIdx)
%endif
%return varGroupTypeIdx
%endfunction
%function SLibVarGroupElementName(aVarGroupIdx, aElementIdx) void
%assert SLibVarGroupNumElements(aVarGroupIdx) > aElementIdx
%assert -1 < aElementIdx
%assign varGroup = ::CompiledModel.VarGroups.VarGroup[aVarGroupIdx]
%if 0 == varGroup.PackageAsStruct
%return varGroup.VarGroupElementIds[aElementIdx]
%endif
%assign cgTypeIdx = SLibVarGroupCGTypeIdx(aVarGroupIdx)
%return LibCGTypeMemberName(cgTypeIdx, aElementIdx)
%endfunction
%function SLibVarGroupSetElementName(aVarGroupIdx,aElementIdx,aNewIdentifier) void
%assert SLibVarGroupNumElements(aVarGroupIdx) > aElementIdx
%assert -1 < aElementIdx
%assign varGroup = ::CompiledModel.VarGroups.VarGroup[aVarGroupIdx]
%if 0 == varGroup.PackageAsStruct
%assign varGroup.VarGroupElementIds[aElementIdx] = aNewIdentifier
%endif
%assign cgTypeIdx = SLibVarGroupCGTypeIdx(aVarGroupIdx)
%return CGMODEL_ACCESS("CGType.Member.SetName", STRING(cgTypeIdx), STRING(aElementIdx), aNewIdentifier)
%endfunction
%function SLibVarGroupElementType(aVarGroupIdx, aElementIdx) void
%assert SLibVarGroupNumElements(aVarGroupIdx) > aElementIdx
%assert -1 < aElementIdx
%assign varGroup = ::CompiledModel.VarGroups.VarGroup[aVarGroupIdx]
%if 0 == varGroup.PackageAsStruct
%return varGroup.VarGroupElementCGTypes[aElementIdx]
%endif
%assign cgTypeIdx = SLibVarGroupCGTypeIdx(aVarGroupIdx)
%return LibCGTypeMemberCGTypeIdx(cgTypeIdx, aElementIdx)
%endfunction
%function SLibVarGroupElementIsVolatile(aVarGroupIdx, aElementIdx) void
%assert SLibVarGroupNumElements(aVarGroupIdx) > aElementIdx
%assert -1 < aElementIdx
%assign source = SLibVarGroupElementSource(aVarGroupIdx,aElementIdx)
%assign idnum = IDNUM(source)
%if idnum[0] == "W"
%assign dwRec = ::CompiledModel.DWorks.DWork[idnum[1]]
%return ISFIELD(dwRec, "IsDataTransferVolatileDWork") && ...
(dwRec.IsDataTransferVolatileDWork == 1)
%else
%return TLC_FALSE
%endif
%endfunction
%function LibGetVarGroupCategory(varGroupIdx) void
%assert varGroupIdx >= 0
%return CGMODEL_ACCESS("VarGroups.Category",varGroupIdx)
%endfunction
%function SLibGetRecordVarGroupIdx(aDataRec) void
%assign retVal = [-1, -1]
%if ISFIELD(aDataRec, "VarGroupIdx")
%assign retVal = aDataRec.VarGroupIdx
%endif
%return retVal
%endfunction
%function SLibIsLocalVariableRecordType(aVarGroupIdx, aElementIdx) void
%assign idNum = IDNUM(SLibVarGroupElementSource(aVarGroupIdx, aElementIdx))
%assign recType = idNum[0]
%return recType == "L" || recType == "LDW" || recType == "S"
%endfunction
%endif