internal virtual void FillOutputQueue(OutputQueue queue, DataBlockDescriptor blockDescriptor) { if (blockDescriptor.AvailableSize == 0) { return; } long itemCount = Math.Min(queue.Capacity, blockDescriptor.AvailableSize); T[] data = Owner.TemporaryFile.ReadBlock(blockDescriptor.CursorPosition, itemCount); blockDescriptor.IncrementCursor(itemCount); queue.Fill(data); }
internal virtual DataBlockDescriptor[] BuildInputBlockDescriptors() { long tailBlockSize = Owner.InputFileSize % Owner.BufferSize; DataBlockDescriptor[] descriptors = new DataBlockDescriptor[GetBlockCount()]; for (long n = 0, fileSize = 0; n < descriptors.Length; n++, fileSize += Owner.BufferSize) { descriptors[n] = new DataBlockDescriptor(fileSize, Owner.BufferSize); } if (tailBlockSize != 0) { descriptors[descriptors.Length - 1] = new DataBlockDescriptor(descriptors.Last().StartIndex, tailBlockSize); } return(descriptors); }
internal virtual DataBlock ReadInputBlock(DataBlockDescriptor descriptor) { T[] inputData = Owner.InputFile.ReadBlock(descriptor.StartIndex, descriptor.Size); return(new DataBlock(inputData)); }