public Superblock(Reader msf, Stream stream) { this.msf = msf; FreeBlockMapBlock = stream.ReadUnsignedIntel32(); NumBlocks = stream.ReadUnsignedIntel32(); NumDirectoryBytes = stream.ReadUnsignedIntel32(); var unknown = stream.ReadUnsignedIntel32(); BlockMapAddr = stream.ReadUnsignedIntel32(); if (NumDirectoryBlocks > msf.BlockSize / sizeof(uint)) { throw new IndexOutOfRangeException("Need to handle larger directory size - update the code"); } if (NumBlocks * msf.BlockSize != stream.Length) { throw new InvalidDataException("Calculated file size is not equal to actual file size"); } using (var directoryBlockStream = msf.OpenBlock(BlockMapAddr)) { var directoryBlocks = new uint[NumDirectoryBlocks]; for (var i = 0; i != NumDirectoryBlocks; ++i) { directoryBlocks[i] = directoryBlockStream.ReadUnsignedIntel32(); } DirectoryBlocks = directoryBlocks; } using (var directoryStream = new MultiBlockStream(msf, DirectoryBlocks)) { NumStreams = directoryStream.ReadUnsignedIntel32(); streamSizes = new uint[NumStreams]; for (var streamIndex = 0; streamIndex != NumStreams; ++streamIndex) { streamSizes[streamIndex] = directoryStream.ReadUnsignedIntel32(); } streamBlocks = new uint[NumStreams][]; for (var streamIndex = 0; streamIndex != NumStreams; ++streamIndex) { var streamSize = streamSizes[streamIndex]; var blockCount = (streamSize + msf.BlockSize - 1) / msf.BlockSize; var blocks = new uint[blockCount]; for (var blockIndex = 0; blockIndex != blockCount; ++blockIndex) { blocks[blockIndex] = directoryStream.ReadUnsignedIntel32(); } streamBlocks[streamIndex] = blocks; } } }
public void Reset() { this.m_current = default(T); bool appendNewLineToFiles = (typeof(T) == typeof(LineRecord)); NativeBlockStream nativeStream = new MultiBlockStream(this.m_filePathList, m_associatedDscStreamName, FileAccess.Read, this.m_compressionScheme, appendNewLineToFiles); this.m_reader = this.m_factory.MakeReader(nativeStream); if (m_context.Configuration.AllowConcurrentUserDelegatesInSingleProcess) { this.m_reader.StartWorker(); } }
internal TableEnumerator(HpcLinqContext context, List <string[]> filePathList, string associatedDscStreamName, DscCompressionScheme scheme) { this.m_context = context; this.m_current = default(T); this.m_filePathList = filePathList; this.m_associatedDscStreamName = associatedDscStreamName; this.m_compressionScheme = scheme; this.m_factory = (HpcLinqFactory <T>)HpcLinqCodeGen.GetFactory(context, typeof(T)); bool appendNewLinesToFiles = (typeof(T) == typeof(LineRecord)); NativeBlockStream nativeStream = new MultiBlockStream(m_filePathList, m_associatedDscStreamName, FileAccess.Read, m_compressionScheme, appendNewLinesToFiles); this.m_reader = this.m_factory.MakeReader(nativeStream); if (context.Configuration.AllowConcurrentUserDelegatesInSingleProcess) { this.m_reader.StartWorker(); } }