private void OnRemoveChildComplete(LazinatorGeneralTree <T> child) { InitializeLocationsIfNecessary(); Locations.Remove(child.Item); foreach (var grandchild in child.GetChildren()) { OnRemoveChildComplete(grandchild); } }
protected internal void InsertChildTree(LazinatorGeneralTree <T> childTree, int index) { if (Children == null) { Children = new LazinatorList <LazinatorGeneralTree <T> >(); } Children.Insert(index, childTree); OnAddChild(childTree); ResetDescendantIndices(); }
public LazinatorGeneralTree <T> AddChildTree(LazinatorGeneralTree <T> childTree) { if (Children == null) { Children = new LazinatorList <LazinatorGeneralTree <T> >(); } Children.Add(childTree); SetChildInformation(childTree, Children.Count - 1, true); return(childTree); }
public LazinatorGeneralTree <T> AddChild(T child) { if (Children == null) { Children = new LazinatorList <LazinatorGeneralTree <T> >(); } LazinatorGeneralTree <T> childTree = CreateTree(child); return(AddChildTree(childTree)); }
private void OnAddChildComplete(LazinatorGeneralTree <T> child) { InitializeLocationsIfNecessary(); var location = ConvertToLazinatorList(child.GetLocationInTree()); Locations[child.Item] = location; foreach (var grandchild in child.GetChildren()) { OnAddChildComplete(grandchild); } }
private void MergeInSingleNode(LazinatorLocationAwareTree <T> nodeToMergeIn, LazinatorGeneralTree <T> placeInTreeToMergeIn) { LazinatorLocationAwareTree <T> parentInThisTree = (LazinatorLocationAwareTree <T>)GetTreeForItem(placeInTreeToMergeIn.Item); var originalChildren = nodeToMergeIn.Children; nodeToMergeIn.Children = null; var descendantClone = nodeToMergeIn.CloneNoBuffer(); parentInThisTree.AddChildTree(descendantClone); nodeToMergeIn.Children = originalChildren; }
public bool RemoveChildTree(LazinatorGeneralTree <T> childTree) { bool removeSuccessful = Children.Remove(childTree); if (removeSuccessful) { OnRemoveChild(childTree); ResetDescendantIndices(); return(true); } return(false); }
protected void SetChildInformation(LazinatorGeneralTree <T> child, int index, bool addingChild) { child.ParentTree = this; child.Level = Level + 1; child.Index = index; if (addingChild) { OnAddChild(child); child.ResetDescendantIndices(); } Initialized = true; }
public virtual LazinatorGeneralTree <T> InsertChild(T child, int index) { if (Children == null) { Children = new LazinatorList <LazinatorGeneralTree <T> >(); } int childrenCount = Children.Count(); LazinatorGeneralTree <T> childTree = null; if (Children == null || index == childrenCount) { childTree = AddChild(child); } else { if (index < 0 || index > childrenCount) { throw new ArgumentException("Invalid index"); } childTree = CreateTree(child); InsertChildTree(childTree, index); } return(childTree); }
protected override void OnRemoveChild(LazinatorGeneralTree <T> child) { GetLocationAwareRoot().OnRemoveChildComplete(child); }
protected virtual void OnRemoveChild(LazinatorGeneralTree <T> child) { }