leveldb
Classes | Public Member Functions | Private Types | Private Member Functions | Private Attributes | Friends | List of all members
leveldb::MemTable Class Reference

#include <memtable.h>

Collaboration diagram for leveldb::MemTable:
Collaboration graph
[legend]

Classes

struct  KeyComparator
 

Public Member Functions

 MemTable (const InternalKeyComparator &comparator)
 
void Ref ()
 
void Unref ()
 
size_t ApproximateMemoryUsage ()
 
IteratorNewIterator ()
 
void Add (SequenceNumber seq, ValueType type, const Slice &key, const Slice &value)
 
bool Get (const LookupKey &key, std::string *value, Status *s)
 

Private Types

typedef SkipList< const char *, KeyComparatorTable
 

Private Member Functions

 ~MemTable ()
 
 MemTable (const MemTable &)
 
void operator= (const MemTable &)
 

Private Attributes

KeyComparator comparator_
 
int refs_
 
Arena arena_
 
Table table_
 

Friends

class MemTableIterator
 
class MemTableBackwardIterator
 

Detailed Description

Definition at line 20 of file memtable.h.

Member Typedef Documentation

§ Table

typedef SkipList<const char*, KeyComparator> leveldb::MemTable::Table
private

Definition at line 74 of file memtable.h.

Constructor & Destructor Documentation

§ MemTable() [1/2]

leveldb::MemTable::MemTable ( const InternalKeyComparator comparator)
explicit

Definition at line 21 of file memtable.cc.

22  : comparator_(cmp),
23  refs_(0),
25 }
KeyComparator comparator_
Definition: memtable.h:76

§ ~MemTable()

leveldb::MemTable::~MemTable ( )
private

Definition at line 27 of file memtable.cc.

27  {
28  assert(refs_ == 0);
29 }
Here is the caller graph for this function:

§ MemTable() [2/2]

leveldb::MemTable::MemTable ( const MemTable )
private

Member Function Documentation

§ Add()

void leveldb::MemTable::Add ( SequenceNumber  seq,
ValueType  type,
const Slice key,
const Slice value 
)

Definition at line 82 of file memtable.cc.

84  {
85  // Format of an entry is concatenation of:
86  // key_size : varint32 of internal_key.size()
87  // key bytes : char[internal_key.size()]
88  // value_size : varint32 of value.size()
89  // value bytes : char[value.size()]
90  size_t key_size = key.size();
91  size_t val_size = value.size();
92  size_t internal_key_size = key_size + 8;
93  const size_t encoded_len =
94  VarintLength(internal_key_size) + internal_key_size +
95  VarintLength(val_size) + val_size;
96  char* buf = arena_.Allocate(encoded_len);
97  char* p = EncodeVarint32(buf, internal_key_size);
98  memcpy(p, key.data(), key_size);
99  p += key_size;
100  EncodeFixed64(p, (s << 8) | type);
101  p += 8;
102  p = EncodeVarint32(p, val_size);
103  memcpy(p, value.data(), val_size);
104  assert((p + val_size) - buf == encoded_len);
105  table_.Insert(buf);
106 }
char * Allocate(size_t bytes)
Definition: arena.h:52
char * EncodeVarint32(char *dst, uint32_t v)
Definition: coding.cc:47
void EncodeFixed64(char *buf, uint64_t value)
Definition: coding.cc:20
int VarintLength(uint64_t v)
Definition: coding.cc:103
void Insert(const Key &key)
Definition: skiplist.h:337
Here is the call graph for this function:
Here is the caller graph for this function:

§ ApproximateMemoryUsage()

size_t leveldb::MemTable::ApproximateMemoryUsage ( )

Definition at line 31 of file memtable.cc.

31 { return arena_.MemoryUsage(); }
size_t MemoryUsage() const
Definition: arena.h:29
Here is the call graph for this function:
Here is the caller graph for this function:

§ Get()

bool leveldb::MemTable::Get ( const LookupKey key,
std::string *  value,
Status s 
)

Definition at line 108 of file memtable.cc.

108  {
109  Slice memkey = key.memtable_key();
110  Table::Iterator iter(&table_);
111  iter.Seek(memkey.data());
112  if (iter.Valid()) {
113  // entry format is:
114  // klength varint32
115  // userkey char[klength]
116  // tag uint64
117  // vlength varint32
118  // value char[vlength]
119  // Check that it belongs to same user key. We do not check the
120  // sequence number since the Seek() call above should have skipped
121  // all entries with overly large sequence numbers.
122  const char* entry = iter.key();
123  uint32_t key_length;
124  const char* key_ptr = GetVarint32Ptr(entry, entry+5, &key_length);
126  Slice(key_ptr, key_length - 8),
127  key.user_key()) == 0) {
128  // Correct user key
129  const uint64_t tag = DecodeFixed64(key_ptr + key_length - 8);
130  switch (static_cast<ValueType>(tag & 0xff)) {
131  case kTypeValue: {
132  Slice v = GetLengthPrefixedSlice(key_ptr + key_length);
133  value->assign(v.data(), v.size());
134  return true;
135  }
136  case kTypeDeletion:
137  *s = Status::NotFound(Slice());
138  return true;
139  }
140  }
141  }
142  return false;
143 }
uint64_t DecodeFixed64(const char *ptr)
Definition: coding.h:72
static Status NotFound(const Slice &msg, const Slice &msg2=Slice())
Definition: status.h:35
const char * GetVarint32Ptr(const char *p, const char *limit, uint32_t *v)
Definition: coding.h:89
static Slice GetLengthPrefixedSlice(const char *data)
Definition: memtable.cc:14
const Comparator * user_comparator() const
Definition: dbformat.h:125
KeyComparator comparator_
Definition: memtable.h:76
const InternalKeyComparator comparator
Definition: memtable.h:67
virtual int Compare(const Slice &a, const Slice &b) const =0
Here is the call graph for this function:
Here is the caller graph for this function:

§ NewIterator()

Iterator * leveldb::MemTable::NewIterator ( )

Definition at line 78 of file memtable.cc.

78  {
79  return new MemTableIterator(&table_);
80 }
friend class MemTableIterator
Definition: memtable.h:71
Here is the caller graph for this function:

§ operator=()

void leveldb::MemTable::operator= ( const MemTable )
private

§ Ref()

void leveldb::MemTable::Ref ( )
inline

Definition at line 27 of file memtable.h.

27 { ++refs_; }
Here is the caller graph for this function:

§ Unref()

void leveldb::MemTable::Unref ( )
inline

Definition at line 30 of file memtable.h.

30  {
31  --refs_;
32  assert(refs_ >= 0);
33  if (refs_ <= 0) {
34  delete this;
35  }
36  }
Here is the call graph for this function:
Here is the caller graph for this function:

Friends And Related Function Documentation

§ MemTableBackwardIterator

friend class MemTableBackwardIterator
friend

Definition at line 72 of file memtable.h.

§ MemTableIterator

friend class MemTableIterator
friend

Definition at line 71 of file memtable.h.

Member Data Documentation

§ arena_

Arena leveldb::MemTable::arena_
private

Definition at line 78 of file memtable.h.

§ comparator_

KeyComparator leveldb::MemTable::comparator_
private

Definition at line 76 of file memtable.h.

§ refs_

int leveldb::MemTable::refs_
private

Definition at line 77 of file memtable.h.

§ table_

Table leveldb::MemTable::table_
private

Definition at line 79 of file memtable.h.


The documentation for this class was generated from the following files: