コード例 #1
0
ファイル: Version.cs プロジェクト: RockNHawk/IronLeveldb
            public Builder With(VersionEdit versionEdit)
            {
                // TODO Update compaction pointers


                // Delete files
                foreach (var iter in versionEdit.DeletedFiles)
                {
                    var level  = iter.Item1;
                    var number = iter.Item2;

                    _levels[level].DeletedFiles.Add(number);
                }

                // Add new files
                foreach (var iter in versionEdit.NewFiles)
                {
                    var level = iter.Item1;
                    var f     = iter.Item2;

                    _levels[level].AddedFiles.Add(f);
                    _levels[level].DeletedFiles.Remove(f.Number);
                }

                return(this);
            }
コード例 #2
0
        public static VersionEdit DecodeFrom(Stream stream)
        {
            var pb = new CodedInputStream(stream);

            var v = new VersionEdit();

            while (pb.Position < stream.Length)
            {
                var tag = (Tag)pb.ReadInt32();

                switch (tag)
                {
                case Tag.Comparator:
                    v.Comparator = pb.ReadString();
                    break;

                case Tag.LogNumber:
                    v.LogNumber = pb.ReadUInt64();
                    break;

                case Tag.NextFileNumber:
                    v.NextFileNumber = pb.ReadUInt64();
                    break;

                case Tag.LastSequence:
                    v.LastSequence = pb.ReadUInt64();
                    // TODO
                    break;

                case Tag.CompactPointer:
                    v._compactPointers.Add(new Tuple <int, InternalKey>(
                                               ReadLevel(pb),      // level
                                               ReadInternalKey(pb) // internal key
                                               ));

                    break;

                case Tag.DeletedFile:

                    v.DeletedFiles.Add(new Tuple <int, ulong>(
                                           ReadLevel(pb),   // level
                                           pb.ReadUInt64()) // number
                                       );

                    break;

                case Tag.NewFile:
                    v._newFiles.Add(new Tuple <int, FileMetaData>(
                                        ReadLevel(pb), // level
                                        new FileMetaData
                    {
                        Number   = pb.ReadUInt64(),
                        FileSize = pb.ReadUInt64(),
                        Smallest = ReadInternalKey(pb),
                        Largest  = ReadInternalKey(pb)
                    })
                                    );
                    break;

                case Tag.PrevLogNumber:
                    v.PrevLogNumber = pb.ReadUInt64();
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }

            return(v);
        }