/// <summary>
 ///   See <see cref = "IByteProvider.DeleteBytes" /> for more information.
 /// </summary>
 public void DeleteBytes(long index, long length)
 {
     try {
         var bytesToDelete = length;
         // Find the first block affected.
         long blockOffset;
         var  block = GetDataBlock(index, out blockOffset);
         // Truncate or remove each block as necessary.
         while ((bytesToDelete > 0) && (block != null))
         {
             var blockLength = block.Length;
             var nextBlock   = block.NextBlock;
             // Delete the appropriate section from the block (this may result in two blocks or a zero length block).
             var 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 {
         Length -= length;
         OnLengthChanged(EventArgs.Empty);
         OnChanged(EventArgs.Empty);
     }
 }
 void ReInitialize()
 {
     _dataMap = new DataMap();
     _dataMap.AddFirst(new FileDataBlock(0, _stream.Length));
     _totalLength = _stream.Length;
 }
Esempio n. 3
0
 void ReInitialize()
 {
     _dataMap = new DataMap();
     _dataMap.AddFirst(new FileDataBlock(0, _stream.Length));
     _totalLength = _stream.Length;
 }