public void InsertBytes(long index, byte[] bs) { try { long blockOffset; DataBlock dataBlock = GetDataBlock(index, out blockOffset); MemoryDataBlock memoryDataBlock1 = dataBlock as MemoryDataBlock; if (memoryDataBlock1 != null) { memoryDataBlock1.InsertBytes(index - blockOffset, bs); } else { FileDataBlock fileDataBlock1 = (FileDataBlock)dataBlock; if (blockOffset == index && dataBlock.PreviousBlock != null) { MemoryDataBlock memoryDataBlock2 = dataBlock.PreviousBlock as MemoryDataBlock; if (memoryDataBlock2 != null) { memoryDataBlock2.InsertBytes(memoryDataBlock2.Length, bs); return; } } FileDataBlock fileDataBlock2 = (FileDataBlock)null; if (index > blockOffset) { fileDataBlock2 = new FileDataBlock(fileDataBlock1.FileOffset, index - blockOffset); } FileDataBlock fileDataBlock3 = (FileDataBlock)null; if (index < blockOffset + fileDataBlock1.Length) { fileDataBlock3 = new FileDataBlock(fileDataBlock1.FileOffset + index - blockOffset, fileDataBlock1.Length - (index - blockOffset)); } DataBlock block = _dataMap.Replace(dataBlock, (DataBlock) new MemoryDataBlock(bs)); if (fileDataBlock2 != null) { _dataMap.AddBefore(block, (DataBlock)fileDataBlock2); } if (fileDataBlock3 == null) { return; } _dataMap.AddAfter(block, (DataBlock)fileDataBlock3); } } finally { _totalLength += (long)bs.Length; OnLengthChanged(EventArgs.Empty); OnChanged(EventArgs.Empty); } }
public void InsertBytes(long index, byte[] bs) { try { long num; DataBlock dataBlock = this.GetDataBlock(index, out num); MemoryDataBlock block2 = dataBlock as MemoryDataBlock; if (block2 != null) { block2.InsertBytes(index - num, bs); } else { FileDataBlock block3 = (FileDataBlock)dataBlock; if ((num == index) && (dataBlock.PreviousBlock != null)) { MemoryDataBlock previousBlock = dataBlock.PreviousBlock as MemoryDataBlock; if (previousBlock != null) { previousBlock.InsertBytes(previousBlock.Length, bs); return; } } FileDataBlock newBlock = null; if (index > num) { newBlock = new FileDataBlock(block3.FileOffset, index - num); } FileDataBlock block6 = null; if (index < (num + block3.Length)) { block6 = new FileDataBlock((block3.FileOffset + index) - num, block3.Length - (index - num)); } dataBlock = this._dataMap.Replace(dataBlock, new MemoryDataBlock(bs)); if (newBlock != null) { this._dataMap.AddBefore(dataBlock, newBlock); } if (block6 != null) { this._dataMap.AddAfter(dataBlock, block6); } } } finally { this._totalLength += bs.Length; this.OnLengthChanged(EventArgs.Empty); this.OnChanged(EventArgs.Empty); } }