internal static DataTypeCategory FromId(AdsDatatypeId id, string typeName) { DataTypeCategory pointer = FromId(id); if (!string.IsNullOrEmpty(typeName) && (pointer == DataTypeCategory.Unknown)) { if (DataTypeStringParser.IsPointer(typeName)) { pointer = DataTypeCategory.Pointer; } else if (DataTypeStringParser.IsReference(typeName)) { pointer = DataTypeCategory.Reference; } else if (DataTypeStringParser.IsArray(typeName)) { pointer = DataTypeCategory.Array; } else if (DataTypeStringParser.IsSubRange(typeName)) { pointer = DataTypeCategory.SubRange; } else if (DataTypeStringParser.IsIntrinsicType(typeName)) { pointer = DataTypeCategory.Primitive; } else if (DataTypeStringParser.IsString(typeName)) { pointer = DataTypeCategory.String; } } return(pointer); }
internal TcAdsSymbolInfo GetSubSymbol(TcAdsSymbolInfo parent, int subIndex, bool dereference) { if (parent == null) { throw new ArgumentNullException("parent"); } TcAdsSymbolInfo info = null; try { ITcAdsDataType dataType = parent.DataType; ITcAdsDataType type2 = null; if (dataType != null) { type2 = (ITcAdsDataType)dataType.ResolveType(DataTypeResolveStrategy.AliasReference); } if (type2 != null) { int count = parent.SubSymbols.Count; if (((type2 != null) && (type2.SubItems.Count > 0)) && (subIndex < type2.SubItems.Count)) { info = this._subSymbolFactory.CreateSubSymbol(parent, subIndex); } else if ((type2 != null) && ((type2.Dimensions.Count > 0) || DataTypeStringParser.IsArray(type2.Name))) { info = this._subSymbolFactory.CreateArrayElement(parent, (TcAdsDataType)type2, subIndex); } else if ((type2 != null) && type2.IsReference) { this.SetPlatformPointerSize(type2.Size); } else if ((subIndex == 0) && type2.IsPointer) { this.SetPlatformPointerSize(type2.Size); if (dereference) { string str; DataTypeStringParser.TryParsePointer(type2.Name, out str); TcAdsDataType referencedType = (TcAdsDataType)this.ResolveDataType(str); if ((referencedType != null) & dereference) { bool flag = (referencedType.Flags & AdsDataTypeFlags.AnySizeArray) == AdsDataTypeFlags.AnySizeArray; if ((referencedType.Size > 0) | flag) { info = this._subSymbolFactory.CreatePointerSymbol(parent, referencedType); } } } } } } catch (Exception exception) { Module.Trace.TraceError($"ParentSymbol: {parent.Name}", exception); throw; } return(info); }