示例#1
0
 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);
 }