public void EncodeTo(LogWriter writer) { writer.RecordStarted(); if (HasComparator) { writer.Write7BitEncodedInt((int)Tag.Comparator); writer.WriteLengthPrefixedSlice(Comparator); } if (LogNumber.HasValue) { writer.Write7BitEncodedInt((int)Tag.LogNumber); writer.Write7BitEncodedLong((long)LogNumber.Value); } if (PrevLogNumber.HasValue) { writer.Write7BitEncodedInt((int)Tag.PrevLogNumber); writer.Write7BitEncodedLong((long)PrevLogNumber.Value); } if (NextFileNumber.HasValue) { writer.Write7BitEncodedInt((int)Tag.NextFileNumber); writer.Write7BitEncodedLong((long)NextFileNumber.Value); } if (LastSequence.HasValue) { writer.Write7BitEncodedInt((int)Tag.LastSequence); writer.Write7BitEncodedLong((long)LastSequence.Value); } for (int level = 0; level < Config.NumberOfLevels; level++) { foreach (var compactionPointer in CompactionPointers[level]) { writer.Write7BitEncodedInt((int)Tag.CompactPointer); writer.Write7BitEncodedInt(level); writer.WriteLengthPrefixedInternalKey(compactionPointer); } foreach (var fileNumber in DeletedFiles[level]) { writer.Write7BitEncodedInt((int)Tag.DeletedFile); writer.Write7BitEncodedInt(level); writer.Write7BitEncodedLong((long)fileNumber); } foreach (var fileMetadata in NewFiles[level]) { writer.Write7BitEncodedInt((int)Tag.NewFile); writer.Write7BitEncodedInt(level); writer.Write7BitEncodedLong((long)fileMetadata.FileNumber); writer.Write7BitEncodedLong(fileMetadata.FileSize); writer.WriteLengthPrefixedInternalKey(fileMetadata.SmallestKey); writer.WriteLengthPrefixedInternalKey(fileMetadata.LargestKey); } } writer.RecordCompleted(true); }
public static async Task WriteRecordAsync(LogWriter logWriterStream, byte[] buffer) { logWriterStream.RecordStarted(); await logWriterStream.WriteAsync(buffer, 0, buffer.Length); logWriterStream.RecordCompleted(true); }