// 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);
     }
 }
Exemple #2
0
 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);
            }
        }