Пример #1
0
        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;
                }
            }
        }
Пример #2
0
            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();
                }
            }
Пример #3
0
            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();
                }
            }