Coverage Report

Created: 2025-06-10 13:21

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/bitcoin/src/leveldb/db/version_edit.h
Line
Count
Source
1
// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
2
// Use of this source code is governed by a BSD-style license that can be
3
// found in the LICENSE file. See the AUTHORS file for names of contributors.
4
5
#ifndef STORAGE_LEVELDB_DB_VERSION_EDIT_H_
6
#define STORAGE_LEVELDB_DB_VERSION_EDIT_H_
7
8
#include <set>
9
#include <utility>
10
#include <vector>
11
12
#include "db/dbformat.h"
13
14
namespace leveldb {
15
16
class VersionSet;
17
18
struct FileMetaData {
19
33.3k
  FileMetaData() : refs(0), allowed_seeks(1 << 30), file_size(0) {}
20
21
  int refs;
22
  int allowed_seeks;  // Seeks allowed until compaction
23
  uint64_t number;
24
  uint64_t file_size;    // File size in bytes
25
  InternalKey smallest;  // Smallest internal key served by table
26
  InternalKey largest;   // Largest internal key served by table
27
};
28
29
class VersionEdit {
30
 public:
31
133k
  VersionEdit() { Clear(); }
32
133k
  ~VersionEdit() = default;
33
34
  void Clear();
35
36
66.5k
  void SetComparatorName(const Slice& name) {
37
66.5k
    has_comparator_ = true;
38
66.5k
    comparator_ = name.ToString();
39
66.5k
  }
40
99.8k
  void SetLogNumber(uint64_t num) {
41
99.8k
    has_log_number_ = true;
42
99.8k
    log_number_ = num;
43
99.8k
  }
44
33.3k
  void SetPrevLogNumber(uint64_t num) {
45
33.3k
    has_prev_log_number_ = true;
46
33.3k
    prev_log_number_ = num;
47
33.3k
  }
48
99.8k
  void SetNextFile(uint64_t num) {
49
99.8k
    has_next_file_number_ = true;
50
99.8k
    next_file_number_ = num;
51
99.8k
  }
52
66.5k
  void SetLastSequence(SequenceNumber seq) {
53
66.5k
    has_last_sequence_ = true;
54
66.5k
    last_sequence_ = seq;
55
66.5k
  }
56
0
  void SetCompactPointer(int level, const InternalKey& key) {
57
0
    compact_pointers_.push_back(std::make_pair(level, key));
58
0
  }
59
60
  // Add the specified file at the specified number.
61
  // REQUIRES: This version has not been saved (see VersionSet::SaveTo)
62
  // REQUIRES: "smallest" and "largest" are smallest and largest keys in file
63
  void AddFile(int level, uint64_t file, uint64_t file_size,
64
24
               const InternalKey& smallest, const InternalKey& largest) {
65
24
    FileMetaData f;
66
24
    f.number = file;
67
24
    f.file_size = file_size;
68
24
    f.smallest = smallest;
69
24
    f.largest = largest;
70
24
    new_files_.push_back(std::make_pair(level, f));
71
24
  }
72
73
  // Delete the specified "file" from the specified "level".
74
0
  void DeleteFile(int level, uint64_t file) {
75
0
    deleted_files_.insert(std::make_pair(level, file));
76
0
  }
77
78
  void EncodeTo(std::string* dst) const;
79
  Status DecodeFrom(const Slice& src);
80
81
  std::string DebugString() const;
82
83
 private:
84
  friend class VersionSet;
85
86
  typedef std::set<std::pair<int, uint64_t>> DeletedFileSet;
87
88
  std::string comparator_;
89
  uint64_t log_number_;
90
  uint64_t prev_log_number_;
91
  uint64_t next_file_number_;
92
  SequenceNumber last_sequence_;
93
  bool has_comparator_;
94
  bool has_log_number_;
95
  bool has_prev_log_number_;
96
  bool has_next_file_number_;
97
  bool has_last_sequence_;
98
99
  std::vector<std::pair<int, InternalKey>> compact_pointers_;
100
  DeletedFileSet deleted_files_;
101
  std::vector<std::pair<int, FileMetaData>> new_files_;
102
};
103
104
}  // namespace leveldb
105
106
#endif  // STORAGE_LEVELDB_DB_VERSION_EDIT_H_