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

#include <filter_block.h>

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

Public Member Functions

 FilterBlockBuilder (const FilterPolicy *)
 
void StartBlock (uint64_t block_offset)
 
void AddKey (const Slice &key)
 
Slice Finish ()
 

Private Member Functions

void GenerateFilter ()
 
 FilterBlockBuilder (const FilterBlockBuilder &)
 
void operator= (const FilterBlockBuilder &)
 

Private Attributes

const FilterPolicypolicy_
 
std::string keys_
 
std::vector< size_t > start_
 
std::string result_
 
std::vector< Slicetmp_keys_
 
std::vector< uint32_t > filter_offsets_
 

Detailed Description

Definition at line 29 of file filter_block.h.

Constructor & Destructor Documentation

§ FilterBlockBuilder() [1/2]

leveldb::FilterBlockBuilder::FilterBlockBuilder ( const FilterPolicy policy)
explicit

Definition at line 18 of file filter_block.cc.

19  : policy_(policy) {
20 }
const FilterPolicy * policy_
Definition: filter_block.h:40

§ FilterBlockBuilder() [2/2]

leveldb::FilterBlockBuilder::FilterBlockBuilder ( const FilterBlockBuilder )
private

Member Function Documentation

§ AddKey()

void leveldb::FilterBlockBuilder::AddKey ( const Slice key)

Definition at line 30 of file filter_block.cc.

30  {
31  Slice k = key;
32  start_.push_back(keys_.size());
33  keys_.append(k.data(), k.size());
34 }
std::vector< size_t > start_
Definition: filter_block.h:42
Here is the call graph for this function:
Here is the caller graph for this function:

§ Finish()

Slice leveldb::FilterBlockBuilder::Finish ( )

Definition at line 36 of file filter_block.cc.

36  {
37  if (!start_.empty()) {
39  }
40 
41  // Append array of per-filter offsets
42  const uint32_t array_offset = result_.size();
43  for (size_t i = 0; i < filter_offsets_.size(); i++) {
45  }
46 
47  PutFixed32(&result_, array_offset);
48  result_.push_back(kFilterBaseLg); // Save encoding parameter in result
49  return Slice(result_);
50 }
void PutFixed32(std::string *dst, uint32_t value)
Definition: coding.cc:35
std::vector< size_t > start_
Definition: filter_block.h:42
static const size_t kFilterBaseLg
Definition: filter_block.cc:15
std::vector< uint32_t > filter_offsets_
Definition: filter_block.h:45
Here is the call graph for this function:
Here is the caller graph for this function:

§ GenerateFilter()

void leveldb::FilterBlockBuilder::GenerateFilter ( )
private

Definition at line 52 of file filter_block.cc.

52  {
53  const size_t num_keys = start_.size();
54  if (num_keys == 0) {
55  // Fast path if there are no keys for this filter
56  filter_offsets_.push_back(result_.size());
57  return;
58  }
59 
60  // Make list of keys from flattened key structure
61  start_.push_back(keys_.size()); // Simplify length computation
62  tmp_keys_.resize(num_keys);
63  for (size_t i = 0; i < num_keys; i++) {
64  const char* base = keys_.data() + start_[i];
65  size_t length = start_[i+1] - start_[i];
66  tmp_keys_[i] = Slice(base, length);
67  }
68 
69  // Generate filter for current set of keys and append to result_.
70  filter_offsets_.push_back(result_.size());
71  policy_->CreateFilter(&tmp_keys_[0], static_cast<int>(num_keys), &result_);
72 
73  tmp_keys_.clear();
74  keys_.clear();
75  start_.clear();
76 }
const FilterPolicy * policy_
Definition: filter_block.h:40
std::vector< size_t > start_
Definition: filter_block.h:42
std::vector< uint32_t > filter_offsets_
Definition: filter_block.h:45
virtual void CreateFilter(const Slice *keys, int n, std::string *dst) const =0
std::vector< Slice > tmp_keys_
Definition: filter_block.h:44
Here is the call graph for this function:
Here is the caller graph for this function:

§ operator=()

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

§ StartBlock()

void leveldb::FilterBlockBuilder::StartBlock ( uint64_t  block_offset)

Definition at line 22 of file filter_block.cc.

22  {
23  uint64_t filter_index = (block_offset / kFilterBase);
24  assert(filter_index >= filter_offsets_.size());
25  while (filter_index > filter_offsets_.size()) {
27  }
28 }
static const size_t kFilterBase
Definition: filter_block.cc:16
std::vector< uint32_t > filter_offsets_
Definition: filter_block.h:45
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

§ filter_offsets_

std::vector<uint32_t> leveldb::FilterBlockBuilder::filter_offsets_
private

Definition at line 45 of file filter_block.h.

§ keys_

std::string leveldb::FilterBlockBuilder::keys_
private

Definition at line 41 of file filter_block.h.

§ policy_

const FilterPolicy* leveldb::FilterBlockBuilder::policy_
private

Definition at line 40 of file filter_block.h.

§ result_

std::string leveldb::FilterBlockBuilder::result_
private

Definition at line 43 of file filter_block.h.

§ start_

std::vector<size_t> leveldb::FilterBlockBuilder::start_
private

Definition at line 42 of file filter_block.h.

§ tmp_keys_

std::vector<Slice> leveldb::FilterBlockBuilder::tmp_keys_
private

Definition at line 44 of file filter_block.h.


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