private void KeyChanged(Transaction trans, Db4objects.Db4o.Internal.Btree.BTreeNode child) { PrepareWrite(trans); SetStateDirty(); int id = child.GetID(); for (int i = 0; i < _count; i++) { if (ChildID(i) == id) { _keys[i] = child._keys[0]; _children[i] = child; KeyChanged(trans, i); return; } } throw new InvalidOperationException("child not found"); }
private void RemoveChild(Transaction trans, Db4objects.Db4o.Internal.Btree.BTreeNode child) { PrepareWrite(trans); SetStateDirty(); int id = child.GetID(); for (int i = 0; i < _count; i++) { if (ChildID(i) == id) { if (FreeIfEmpty(trans, _count - 1)) { return; } Remove(i); if (i < 1) { TellParentAboutChangedKey(trans); } if (_count == 0) { // root node empty case only, have to turn it into a leaf _isLeaf = true; } return; } } throw new InvalidOperationException("child not found"); }