/// <summary> /// Удаляет связь с дочерним элементом /// </summary> /// <param name="child">Дочерний элемент.</param> protected internal void UnlinkChild(GraphItem child) { if(Object.Equals(_ch, child)) _ch = null; else if(_chs != null) { _chs.Remove(child); if(_chs.Length == 0) _chs = null; else if(_chs.Length == 1) { _ch = _chs[0]; _chs = null; } } }
/// <summary> /// Удаляет связь с родителским элементом /// </summary> /// <param name="parent">Родительский элемент.</param> protected internal void UnlinkParent(GraphItem parent) { if(Object.Equals(_p, parent)) _p = null; else if(_ps != null) { _ps.Remove(parent); if(_ps.Length == 0) _ps = null; else if(_ps.Length == 1) { _p = _ps[0]; _ps = null; } } }
/// <summary> /// Добавляет связь с дочерним элементом в начало списка связей /// </summary> /// <param name="child">Дочерний элемент.</param> protected internal void LinkChildFirst(GraphItem child) { if(_chs != null) _chs.Insert(0, child); else if(_ch == null) _ch = child; else { _chs = new ElasticArray<GraphItem>() {child, _ch }; _ch = null; } }
/// <summary> /// Добавляет связь с дочерним элементом /// </summary> /// <param name="child">Дочерний элемент.</param> protected internal void LinkChild(GraphItem child) { if(_chs != null) _chs.Add(child); else if(_ch == null) _ch = child; else { _chs = new ElasticArray<GraphItem>() { _ch, child }; _ch = null; } }
/// <summary> /// Добавляет связь с родителским элементом /// </summary> /// <param name="parent">Родительский элемент.</param> protected internal void LinkParent(GraphItem parent) { if(_ps != null) _ps.Add(parent); else if(_p == null) _p = parent; else { _ps = new ElasticArray<GraphItem>() { _p, parent }; _p = null; } }
//------------------------------------------------------------------------------------- #region << Protected & Override Methods >> /// <summary> /// Удаляет все дочерние и родительские связи элемента. /// </summary> protected internal void UnlinkItem() { if(IsRoot == false) { foreach(GraphItem i in Parents.ToArray()) i.UnlinkChild(this); _p = null; _ps = null; } if(HasChildren) { foreach(GraphItem i in Children.ToArray()) i.UnlinkParent(this); _ch = null; _chs = null; } }