bool LoadKeyIndex(uint fileId, IKeyIndex info) { try { var reader = FileCollection.GetFile(fileId).GetExclusiveReader(); FileKeyIndex.SkipHeader(reader); var keyCount = info.KeyValueCount; _nextRoot.TrLogFileId = info.TrLogFileId; _nextRoot.TrLogOffset = info.TrLogOffset; _nextRoot.CommitUlong = info.CommitUlong; if (info.Compression == KeyIndexCompression.Old) { _nextRoot.BuildTree(keyCount, () => { var keyLength = reader.ReadVInt32(); var key = ByteBuffer.NewAsync(new byte[Math.Abs(keyLength)]); reader.ReadBlock(key); if (keyLength < 0) { _compression.DecompressKey(ref key); } return(new BTreeLeafMember { Key = key.ToByteArray(), ValueFileId = reader.ReadVUInt32(), ValueOfs = reader.ReadVUInt32(), ValueSize = reader.ReadVInt32() }); }); } else { if (info.Compression != KeyIndexCompression.None) { return(false); } var prevKey = ByteBuffer.NewEmpty(); _nextRoot.BuildTree(keyCount, () => { var prefixLen = (int)reader.ReadVUInt32(); var keyLengthWithoutPrefix = (int)reader.ReadVUInt32(); var key = ByteBuffer.NewAsync(new byte[prefixLen + keyLengthWithoutPrefix]); Array.Copy(prevKey.Buffer, prevKey.Offset, key.Buffer, key.Offset, prefixLen); reader.ReadBlock(key.SubBuffer(prefixLen)); prevKey = key; return(new BTreeLeafMember { Key = key.ToByteArray(), ValueFileId = reader.ReadVUInt32(), ValueOfs = reader.ReadVUInt32(), ValueSize = reader.ReadVInt32() }); }); } if (reader.Eof) { return(true); } if (reader.ReadInt32() == EndOfIndexFileMarker) { return(true); } return(false); } catch (Exception) { return(false); } }
static string LoadUsedFilesFromKvi(IKeyIndex keyIndex, FileCollectionWithFileInfos fcfi, uint fileId) { try { var file = fcfi.GetFile(fileId); var reader = new SpanReader(file.GetExclusiveReader()); FileKeyIndex.SkipHeader(ref reader); var keyCount = keyIndex.KeyValueCount; var usedFileIds = new RefDictionary <uint, ulong>(); if (keyIndex.Compression == KeyIndexCompression.Old) { for (var i = 0; i < keyCount; i++) { var keyLength = reader.ReadVInt32(); reader.SkipBlock(keyLength); var vFileId = reader.ReadVUInt32(); reader.SkipVUInt32(); var len = reader.ReadVInt32(); if (vFileId > 0) { usedFileIds.GetOrAddValueRef(vFileId) += (ulong)Math.Abs(len); } } } else { if (keyIndex.Compression != KeyIndexCompression.None) { return(""); } for (var i = 0; i < keyCount; i++) { reader.SkipVUInt32(); var keyLengthWithoutPrefix = (int)reader.ReadVUInt32(); reader.SkipBlock(keyLengthWithoutPrefix); var vFileId = reader.ReadVUInt32(); reader.SkipVUInt32(); var len = reader.ReadVInt32(); if (vFileId > 0) { usedFileIds.GetOrAddValueRef(vFileId) += (ulong)Math.Abs(len); } } } var used = usedFileIds.OrderBy(a => a.Key).ToArray(); var sb = new StringBuilder(); foreach (var keyValuePair in used) { sb.Append(" in "); sb.Append(keyValuePair.Key); sb.Append(" used "); sb.Append(keyValuePair.Value); sb.Append('\n'); } return(sb.ToString()); } catch { // ignore } return(""); }
public bool Equals(IKeyIndex <LinearKey3> other) { return(linearKey == other.key); }
public bool Equals(IKeyIndex <MortonKey3> other) { return(mortonKey == other.key); }