leveldb
Public Member Functions | Private Attributes | List of all members
leveldb::InternalKeyComparator Class Reference

#include <dbformat.h>

Inheritance diagram for leveldb::InternalKeyComparator:
Inheritance graph
[legend]
Collaboration diagram for leveldb::InternalKeyComparator:
Collaboration graph
[legend]

Public Member Functions

 InternalKeyComparator (const Comparator *c)
 
virtual const char * Name () const
 
virtual int Compare (const Slice &a, const Slice &b) const
 
virtual void FindShortestSeparator (std::string *start, const Slice &limit) const
 
virtual void FindShortSuccessor (std::string *key) const
 
const Comparatoruser_comparator () const
 
int Compare (const InternalKey &a, const InternalKey &b) const
 
- Public Member Functions inherited from leveldb::Comparator
int operator() (const Key &a, const Key &b) const
 
virtual ~Comparator ()
 

Private Attributes

const Comparatoruser_comparator_
 

Detailed Description

Definition at line 113 of file dbformat.h.

Constructor & Destructor Documentation

§ InternalKeyComparator()

leveldb::InternalKeyComparator::InternalKeyComparator ( const Comparator c)
inlineexplicit

Definition at line 117 of file dbformat.h.

117 : user_comparator_(c) { }
const Comparator * user_comparator_
Definition: dbformat.h:115

Member Function Documentation

§ Compare() [1/2]

int leveldb::InternalKeyComparator::Compare ( const Slice a,
const Slice b 
) const
virtual

Implements leveldb::Comparator.

Definition at line 50 of file dbformat.cc.

50  {
51  // Order by:
52  // increasing user key (according to user-supplied comparator)
53  // decreasing sequence number
54  // decreasing type (though sequence# should be enough to disambiguate)
56  if (r == 0) {
57  const uint64_t anum = DecodeFixed64(akey.data() + akey.size() - 8);
58  const uint64_t bnum = DecodeFixed64(bkey.data() + bkey.size() - 8);
59  if (anum > bnum) {
60  r = -1;
61  } else if (anum < bnum) {
62  r = +1;
63  }
64  }
65  return r;
66 }
uint64_t DecodeFixed64(const char *ptr)
Definition: coding.h:72
Slice ExtractUserKey(const Slice &internal_key)
Definition: dbformat.h:98
const Comparator * user_comparator_
Definition: dbformat.h:115
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:

§ Compare() [2/2]

int leveldb::InternalKeyComparator::Compare ( const InternalKey a,
const InternalKey b 
) const
inline

Definition at line 171 of file dbformat.h.

172  {
173  return Compare(a.Encode(), b.Encode());
174 }
virtual int Compare(const Slice &a, const Slice &b) const
Definition: dbformat.cc:50
Here is the call graph for this function:

§ FindShortestSeparator()

void leveldb::InternalKeyComparator::FindShortestSeparator ( std::string *  start,
const Slice limit 
) const
virtual

Implements leveldb::Comparator.

Definition at line 68 of file dbformat.cc.

70  {
71  // Attempt to shorten the user portion of the key
72  Slice user_start = ExtractUserKey(*start);
73  Slice user_limit = ExtractUserKey(limit);
74  std::string tmp(user_start.data(), user_start.size());
75  user_comparator_->FindShortestSeparator(&tmp, user_limit);
76  if (tmp.size() < user_start.size() &&
77  user_comparator_->Compare(user_start, tmp) < 0) {
78  // User key has become shorter physically, but larger logically.
79  // Tack on the earliest possible number to the shortened user key.
81  assert(this->Compare(*start, tmp) < 0);
82  assert(this->Compare(tmp, limit) < 0);
83  start->swap(tmp);
84  }
85 }
virtual int Compare(const Slice &a, const Slice &b) const
Definition: dbformat.cc:50
static const SequenceNumber kMaxSequenceNumber
Definition: dbformat.h:67
virtual void FindShortestSeparator(std::string *start, const Slice &limit) const =0
static const ValueType kValueTypeForSeek
Definition: dbformat.h:61
void PutFixed64(std::string *dst, uint64_t value)
Definition: coding.cc:41
Slice ExtractUserKey(const Slice &internal_key)
Definition: dbformat.h:98
const Comparator * user_comparator_
Definition: dbformat.h:115
virtual int Compare(const Slice &a, const Slice &b) const =0
static uint64_t PackSequenceAndType(uint64_t seq, ValueType t)
Definition: dbformat.cc:12
Here is the call graph for this function:
Here is the caller graph for this function:

§ FindShortSuccessor()

void leveldb::InternalKeyComparator::FindShortSuccessor ( std::string *  key) const
virtual

Implements leveldb::Comparator.

Definition at line 87 of file dbformat.cc.

87  {
88  Slice user_key = ExtractUserKey(*key);
89  std::string tmp(user_key.data(), user_key.size());
91  if (tmp.size() < user_key.size() &&
92  user_comparator_->Compare(user_key, tmp) < 0) {
93  // User key has become shorter physically, but larger logically.
94  // Tack on the earliest possible number to the shortened user key.
96  assert(this->Compare(*key, tmp) < 0);
97  key->swap(tmp);
98  }
99 }
virtual int Compare(const Slice &a, const Slice &b) const
Definition: dbformat.cc:50
static const SequenceNumber kMaxSequenceNumber
Definition: dbformat.h:67
static const ValueType kValueTypeForSeek
Definition: dbformat.h:61
void PutFixed64(std::string *dst, uint64_t value)
Definition: coding.cc:41
virtual void FindShortSuccessor(std::string *key) const =0
Slice ExtractUserKey(const Slice &internal_key)
Definition: dbformat.h:98
const Comparator * user_comparator_
Definition: dbformat.h:115
virtual int Compare(const Slice &a, const Slice &b) const =0
static uint64_t PackSequenceAndType(uint64_t seq, ValueType t)
Definition: dbformat.cc:12
Here is the call graph for this function:
Here is the caller graph for this function:

§ Name()

const char * leveldb::InternalKeyComparator::Name ( ) const
virtual

Implements leveldb::Comparator.

Definition at line 46 of file dbformat.cc.

46  {
47  return "leveldb.InternalKeyComparator";
48 }

§ user_comparator()

const Comparator* leveldb::InternalKeyComparator::user_comparator ( ) const
inline

Definition at line 125 of file dbformat.h.

125 { return user_comparator_; }
const Comparator * user_comparator_
Definition: dbformat.h:115
Here is the caller graph for this function:

Member Data Documentation

§ user_comparator_

const Comparator* leveldb::InternalKeyComparator::user_comparator_
private

Definition at line 115 of file dbformat.h.


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