internal override void PrepareForRead() { _batData = new byte[Length]; long fileOffset = _dataStart; BatEntry entry = new BatEntry(); foreach (Range <long, long> range in _blocks) { for (long block = range.Offset; block < range.Offset + range.Count; ++block) { long chunk = block / _chunkRatio; long chunkOffset = block % _chunkRatio; long batIndex = chunk * (_chunkRatio + 1) + chunkOffset; entry.FileOffsetMB = fileOffset / Sizes.OneMiB; entry.PayloadBlockStatus = PayloadBlockStatus.FullyPresent; entry.WriteTo(_batData, (int)(batIndex * 8)); fileOffset += _blockSize; } } }
public PayloadBlockStatus AllocateSpaceForBlock(int block) { bool dataModified = false; BatEntry blockEntry = new BatEntry(_batData, block * 8); if (blockEntry.FileOffsetMB == 0) { blockEntry.FileOffsetMB = AllocateSpace((int)_fileParameters.BlockSize, false) / Sizes.OneMiB; dataModified = true; } if (blockEntry.PayloadBlockStatus != PayloadBlockStatus.FullyPresent && blockEntry.PayloadBlockStatus != PayloadBlockStatus.PartiallyPresent) { if ((_fileParameters.Flags & FileParametersFlags.HasParent) != 0) { if (!HasSectorBitmap) { SectorBitmapPos = AllocateSpace((int)Sizes.OneMiB, true); } blockEntry.PayloadBlockStatus = PayloadBlockStatus.PartiallyPresent; } else { blockEntry.PayloadBlockStatus = PayloadBlockStatus.FullyPresent; } dataModified = true; } if (dataModified) { blockEntry.WriteTo(_batData, block * 8); _bat.Position = _chunk * (_blocksPerChunk + 1) * 8; _bat.Write(_batData, 0, (_blocksPerChunk + 1) * 8); } return blockEntry.PayloadBlockStatus; }
internal override void PrepareForRead() { _batData = new byte[Length]; long fileOffset = _dataStart; BatEntry entry = new BatEntry(); foreach(var range in _blocks) { for(long block = range.Offset; block < range.Offset + range.Count; ++block) { long chunk = block / _chunkRatio; long chunkOffset = block % _chunkRatio; long batIndex = (chunk * (_chunkRatio + 1)) + chunkOffset; entry.FileOffsetMB = fileOffset / Sizes.OneMiB; entry.PayloadBlockStatus = PayloadBlockStatus.FullyPresent; entry.WriteTo(_batData, (int)(batIndex * 8)); fileOffset += _blockSize; } } }