// Token: 0x0600036B RID: 875 RVA: 0x00012570 File Offset: 0x00010770 public void DeleteBytes(long index, long length) { try { long num = length; long num2; DataBlock dataBlock = this.GetDataBlock(index, out num2); while (num > 0L && dataBlock != null) { long length2 = dataBlock.Length; DataBlock nextBlock = dataBlock.NextBlock; long num3 = Math.Min(num, length2 - (index - num2)); dataBlock.RemoveBytes(index - num2, num3); if (dataBlock.Length == 0L) { this._dataMap.Remove(dataBlock); if (this._dataMap.FirstBlock == null) { this._dataMap.AddFirst(new MemoryDataBlock(new byte[0])); } } num -= num3; num2 += dataBlock.Length; dataBlock = ((num > 0L) ? nextBlock : null); } } finally { this._totalLength -= length; this.OnLengthChanged(EventArgs.Empty); this.OnChanged(EventArgs.Empty); } }
public void DeleteBytes(long index, long length) { try { long val1 = length; long blockOffset; DataBlock nextBlock; for (DataBlock block = this.GetDataBlock(index, out blockOffset); val1 > 0L && block != null; block = val1 > 0L ? nextBlock : (DataBlock)null) { long length1 = block.Length; nextBlock = block.NextBlock; long count = Math.Min(val1, length1 - (index - blockOffset)); block.RemoveBytes(index - blockOffset, count); if (block.Length == 0L) { this._dataMap.Remove(block); if (this._dataMap.FirstBlock == null) { this._dataMap.AddFirst((DataBlock) new MemoryDataBlock(new byte[0])); } } val1 -= count; blockOffset += block.Length; } } finally { this._totalLength -= length; this.OnLengthChanged(EventArgs.Empty); this.OnChanged(EventArgs.Empty); } }
/// <summary> /// See <see cref="IByteProvider.DeleteBytes" /> for more information. /// </summary> public void DeleteBytes(long index, long length) { if (!_supportsInsDel) { return; } try { long bytesToDelete = length; // Find the first block affected. long blockOffset; DataBlock block = GetDataBlock(index, out blockOffset); // Truncate or remove each block as necessary. while ((bytesToDelete > 0) && (block != null)) { long blockLength = block.Length; DataBlock nextBlock = block.NextBlock; // Delete the appropriate section from the block (this may result in two blocks or a zero length block). long count = Math.Min(bytesToDelete, blockLength - (index - blockOffset)); block.RemoveBytes(index - blockOffset, count); if (block.Length == 0) { _dataMap.Remove(block); if (_dataMap.FirstBlock == null) { _dataMap.AddFirst(new MemoryDataBlock(new byte[0])); } } bytesToDelete -= count; blockOffset += block.Length; block = (bytesToDelete > 0) ? nextBlock : null; } } finally { _totalLength -= length; OnLengthChanged(EventArgs.Empty); OnChanged(EventArgs.Empty); } }