Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
 internal virtual DataBlock ReadInputBlock(DataBlockDescriptor descriptor)
 {
     T[] inputData = Owner.InputFile.ReadBlock(descriptor.StartIndex, descriptor.Size);
     return(new DataBlock(inputData));
 }