public void Update(IKeyNode keyNode, T instance) { var value = _getter(instance); var node = (DataNode <K>)keyNode[this]; if (node != null) { Debug.Assert(node.Keys.Contains(keyNode)); if (_tree.Comparer.Compare(value, node.Key) == 0) { return; } node.Keys.Remove(keyNode); if (node.Keys.Count == 0) { _tree.Remove(node); } } node = _tree.AddOrGet(value); node.Keys.Add(keyNode); keyNode[this] = node; }
bool ICleanup.Cleanup(IKeyNode sender, object stuff) { var node = (DataNode <K>)stuff; return(node.Keys.Remove(sender) && (node.Keys.Count == 0) && _tree.Remove(node)); }
Location <T> IKeyIndex <T> .GetLocation(IKeyNode node) { return(GetLocation((KeyNode <K>)node, true)); }