public void Remove(DbItemReference reference) { if (_rootNodeReference.Equals(reference)) { throw new ArgumentOutOfRangeException(nameof(reference), "Unable to delete the root node"); } _nodes.Remove(reference.ToString()); }
public void Remove(DbItemReference reference) { if (_rootNodeReference.Equals(reference)) { throw new ArgumentOutOfRangeException(nameof(reference), "Unable to delete the root node"); } var page = _pageManager.FetchPage(reference.PageIndex); if (page.BackingObject == null) { var obj = RadixTreePageBackingObject.FromPage(page); page = new Page(_pageManager, reference.PageIndex, () => Serialize(obj), obj); } var backingObject = (RadixTreePageBackingObject)page.BackingObject; if (backingObject.Items.Count == reference.ItemIndex + 1) { backingObject.Items.RemoveAt(reference.ItemIndex); } else { backingObject.Items[reference.ItemIndex] = null; } if (backingObject.Items.Any(item => item != null)) { _pageManager.UpdatePage(page); } else { _pageManager.RemovePage(page.Index); if (_recentPages.Contains(page.Index)) { _recentPages.Remove(page.Index); } } }