/// <summary> /// Creates a <see cref="Definition"/> instance. /// </summary> /// <param name="parent"></param> /// <param name="entity"></param> internal Definition(IEntity entity, Definition parent) { if (entity == null) { throw new ArgumentNullException("entity"); } if (parent == null) { throw new ArgumentNullException("parent"); } _parentNode = parent; uint[] id = string.IsNullOrEmpty(parent.Name) ? null : parent._id; // null for root node (use _id rather than GetNumericalForm to avoid the Clone) _id = ObjectIdentifier.AppendTo(id, entity.Value); _parent = parent.Name; _name = entity.Name; _module = entity.ModuleName; _value = entity.Value; _parentNode.Append(this); Type = DetermineType(entity.GetType().ToString(), _name, _parentNode); Entity = entity; }
public uint[] Translate(string moduleName, string name) { if (moduleName == null) { throw new ArgumentNullException("moduleName"); } if (moduleName.Length == 0) { throw new ArgumentException("module cannot be empty"); } if (name == null) { throw new ArgumentNullException("name"); } if (name.Length == 0) { throw new ArgumentException("name cannot be empty"); } if (!name.Contains(".")) { return(_tree.Find(moduleName, name).GetNumericalForm()); } string[] content = name.Split('.'); if (content.Length != 2) { throw new ArgumentException("name can only contain one dot"); } int value; bool succeeded = int.TryParse(content[1], out value); if (!succeeded) { throw new ArgumentException("not a decimal after dot"); } var oid = _tree.Find(moduleName, content[0]).GetNumericalForm(); return(ObjectIdentifier.AppendTo(oid, (uint)value)); }