/// <summary> /// Creates a new variable type. /// </summary> private BaseVariableTypeState CreateVariableType(NodeState parent, IDictionary<NodeId, IList<IReference>> externalReferences, string path, string name, BuiltInType dataType, int valueRank) { BaseDataVariableTypeState type = new BaseDataVariableTypeState(); type.SymbolicName = name; type.SuperTypeId = VariableTypeIds.BaseDataVariableType; type.NodeId = new NodeId(path, NamespaceIndex); type.BrowseName = new QualifiedName(name, NamespaceIndex); type.DisplayName = type.BrowseName.Name; type.WriteMask = AttributeWriteMask.None; type.UserWriteMask = AttributeWriteMask.None; type.IsAbstract = false; type.DataType = (uint)dataType; type.ValueRank = valueRank; type.Value = null; IList<IReference> references = null; if (!externalReferences.TryGetValue(VariableTypeIds.BaseDataVariableType, out references)) { externalReferences[VariableTypeIds.BaseDataVariableType] = references = new List<IReference>(); } references.Add(new NodeStateReference(ReferenceTypes.HasSubtype, false, type.NodeId)); if (parent != null) { parent.AddReference(ReferenceTypes.Organizes, false, type.NodeId); type.AddReference(ReferenceTypes.Organizes, true, parent.NodeId); } AddPredefinedNode(SystemContext, type); return type; }