BTDB.ChunkCache.DiskChunkCache.LoadContent C# (CSharp) Method

LoadContent() private method

private LoadContent ( ) : void
return void
        void LoadContent()
        {
            AbstractBufferedReader reader;
            foreach (var collectionFile in _fileCollection.Enumerate())
            {
                reader = collectionFile.GetExclusiveReader();
                if (!reader.CheckMagic(MagicStartOfFile)) continue; // Don't touch files alien files
                var fileType = (DiskChunkFileType)reader.ReadUInt8();
                IFileInfo fileInfo;
                switch (fileType)
                {
                    case DiskChunkFileType.HashIndex:
                        fileInfo = new FileHashIndex(reader);
                        break;
                    case DiskChunkFileType.PureValues:
                        fileInfo = new FilePureValues(reader);
                        break;
                    default:
                        fileInfo = UnknownFile.Instance;
                        break;
                }
                if (_fileGeneration < fileInfo.Generation) _fileGeneration = fileInfo.Generation;
                _fileInfos.TryAdd(collectionFile.Index, fileInfo);
            }
            var hashFilePair =
                _fileInfos.Where(f => f.Value.FileType == DiskChunkFileType.HashIndex).OrderByDescending(
                    f => f.Value.Generation).FirstOrDefault();
            if (hashFilePair.Value == null) return;
            reader = _fileCollection.GetFile(hashFilePair.Key).GetExclusiveReader();
            FileHashIndex.SkipHeader(reader);
            if (((FileHashIndex)hashFilePair.Value).KeySize != _keySize) return;
            var keyBuf = ByteBuffer.NewSync(new byte[_keySize]);
            while (true)
            {
                var cacheValue = new CacheValue();
                cacheValue.FileOfs = reader.ReadVUInt32();
                if (cacheValue.FileOfs == 0) break;
                cacheValue.FileId = reader.ReadVUInt32();
                cacheValue.AccessRate = reader.ReadVUInt32();
                cacheValue.ContentLength = reader.ReadVUInt32();
                reader.ReadBlock(keyBuf);
                _cache.TryAdd(new ByteStructs.Key20(keyBuf), cacheValue);
            }
        }