public void Remove(ExpandedNodeId typeId)
{
if (NodeId.IsNull(typeId) || typeId.ServerIndex != 0)
{
return;
}
NodeId localId = ExpandedNodeId.ToNodeId(typeId, m_namespaceUris);
if (localId == null)
{
return;
}
lock (m_lock)
{
// remove type.
TypeInfo typeInfo = null;
if (!m_nodes.TryGetValue(localId, out typeInfo))
{
return;
}
m_nodes.Remove(localId);
// setting the flag to deleted ensures references from subtypes are not broken.
typeInfo.Deleted = true;
// remove from subtype list.
if (typeInfo.SuperType != null)
{
typeInfo.SuperType.RemoveSubType(localId);
}
// remove encodings.
if (typeInfo.Encodings != null)
{
for (int ii = 0; ii < typeInfo.Encodings.Length; ii++)
{
m_encodings.Remove(typeInfo.Encodings[ii]);
}
}
// remove reference type.
if (!QualifiedName.IsNull(typeInfo.BrowseName))
{
m_referenceTypes.Remove(typeInfo.BrowseName);
}
}
}
#endregion