public void EraseRange(long firstKeyIndex, long lastKeyIndex) { if (firstKeyIndex < 0) { firstKeyIndex = 0; } if (lastKeyIndex >= GetKeyValueCount()) { lastKeyIndex = _prefixKeyCount - 1; } if (lastKeyIndex < firstKeyIndex) { return; } MakeWrittable(); firstKeyIndex += _prefixKeyStart; lastKeyIndex += _prefixKeyStart; InvalidateCurrentKey(); _prefixKeyCount -= lastKeyIndex - firstKeyIndex + 1; BtreeRoot.FillStackByIndex(_stack, firstKeyIndex); if (firstKeyIndex == lastKeyIndex) { _keyValueDB.WriteEraseOneCommand(GetCurrentKeyFromStack()); } else { var firstKey = GetCurrentKeyFromStack(); BtreeRoot.FillStackByIndex(_stack, lastKeyIndex); _keyValueDB.WriteEraseRangeCommand(firstKey, GetCurrentKeyFromStack()); } BtreeRoot.EraseRange(firstKeyIndex, lastKeyIndex); }