LCOV - code coverage report
Current view: top level - src/leveldb/db - memtable.h (source / functions) Coverage Total Hit
Test: total_coverage.info Lines: 100.0 % 9 9
Test Date: 2026-02-04 05:05:50 Functions: 100.0 % 1 1
Branches: 62.5 % 16 10

             Branch data     Line data    Source code
       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_MEMTABLE_H_
       6                 :             : #define STORAGE_LEVELDB_DB_MEMTABLE_H_
       7                 :             : 
       8                 :             : #include <string>
       9                 :             : 
      10                 :             : #include "db/dbformat.h"
      11                 :             : #include "db/skiplist.h"
      12                 :             : #include "leveldb/db.h"
      13                 :             : #include "util/arena.h"
      14                 :             : 
      15                 :             : namespace leveldb {
      16                 :             : 
      17                 :             : class InternalKeyComparator;
      18                 :             : class MemTableIterator;
      19                 :             : 
      20                 :             : class MemTable {
      21                 :             :  public:
      22                 :             :   // MemTables are reference counted.  The initial reference count
      23                 :             :   // is zero and the caller must call Ref() at least once.
      24                 :             :   explicit MemTable(const InternalKeyComparator& comparator);
      25                 :             : 
      26                 :             :   MemTable(const MemTable&) = delete;
      27                 :             :   MemTable& operator=(const MemTable&) = delete;
      28                 :             : 
      29                 :             :   // Increase reference count.
      30   [ +  -  +  +  :     6056792 :   void Ref() { ++refs_; }
                   -  + ]
      31                 :             : 
      32                 :             :   // Drop reference count.  Delete if no more references exist.
      33                 :     6060839 :   void Unref() {
      34                 :     6060839 :     --refs_;
      35         [ -  + ]:     6060839 :     assert(refs_ >= 0);
      36         [ +  + ]:     6060839 :     if (refs_ <= 0) {
      37                 :        4582 :       delete this;
      38                 :             :     }
      39                 :     6060839 :   }
      40                 :             : 
      41                 :             :   // Returns an estimate of the number of bytes of data in use by this
      42                 :             :   // data structure. It is safe to call when MemTable is being modified.
      43                 :             :   size_t ApproximateMemoryUsage();
      44                 :             : 
      45                 :             :   // Return an iterator that yields the contents of the memtable.
      46                 :             :   //
      47                 :             :   // The caller must ensure that the underlying MemTable remains live
      48                 :             :   // while the returned iterator is live.  The keys returned by this
      49                 :             :   // iterator are internal keys encoded by AppendInternalKey in the
      50                 :             :   // db/format.{h,cc} module.
      51                 :             :   Iterator* NewIterator();
      52                 :             : 
      53                 :             :   // Add an entry into memtable that maps key to value at the
      54                 :             :   // specified sequence number and with the specified type.
      55                 :             :   // Typically value will be empty if type==kTypeDeletion.
      56                 :             :   void Add(SequenceNumber seq, ValueType type, const Slice& key,
      57                 :             :            const Slice& value);
      58                 :             : 
      59                 :             :   // If memtable contains a value for key, store it in *value and return true.
      60                 :             :   // If memtable contains a deletion for key, store a NotFound() error
      61                 :             :   // in *status and return true.
      62                 :             :   // Else, return false.
      63                 :             :   bool Get(const LookupKey& key, std::string* value, Status* s);
      64                 :             : 
      65                 :             :  private:
      66                 :             :   friend class MemTableIterator;
      67                 :             :   friend class MemTableBackwardIterator;
      68                 :             : 
      69   [ +  -  +  - ]:       13748 :   struct KeyComparator {
      70                 :             :     const InternalKeyComparator comparator;
      71         [ +  - ]:        4583 :     explicit KeyComparator(const InternalKeyComparator& c) : comparator(c) {}
      72                 :             :     int operator()(const char* a, const char* b) const;
      73                 :             :   };
      74                 :             : 
      75                 :             :   typedef SkipList<const char*, KeyComparator> Table;
      76                 :             : 
      77                 :             :   ~MemTable();  // Private since only Unref() should be used to delete it
      78                 :             : 
      79                 :             :   KeyComparator comparator_;
      80                 :             :   int refs_;
      81                 :             :   Arena arena_;
      82                 :             :   Table table_;
      83                 :             : };
      84                 :             : 
      85                 :             : }  // namespace leveldb
      86                 :             : 
      87                 :             : #endif  // STORAGE_LEVELDB_DB_MEMTABLE_H_
        

Generated by: LCOV version 2.0-1