15 static const size_t kFilterBaseLg = 11;
16 static const size_t kFilterBase = 1 << kFilterBaseLg;
23 uint64_t filter_index = (block_offset / kFilterBase);
48 result_.push_back(kFilterBaseLg);
53 const size_t num_keys =
start_.size();
63 for (
size_t i = 0; i < num_keys; i++) {
79 const Slice& contents)
85 size_t n = contents.
size();
89 if (last_word > n - 5)
return;
92 num_ = (n - 5 - last_word) / 4;
103 }
else if (start == limit) {
void PutFixed32(std::string *dst, uint32_t value)
std::vector< uint32_t > filter_offsets_
const char * data() const
bool KeyMayMatch(uint64_t block_offset, const Slice &key)
std::vector< size_t > start_
uint32_t DecodeFixed32(const char *ptr)
std::vector< Slice > tmp_keys_
const FilterPolicy * policy_
unsigned long long uint64_t
FilterBlockReader(const FilterPolicy *policy, const Slice &contents)
const FilterPolicy * policy_
virtual void CreateFilter(const Slice *keys, int n, std::string *dst) const =0
FilterBlockBuilder(const FilterPolicy *)
void AddKey(const Slice &key)
virtual bool KeyMayMatch(const Slice &key, const Slice &filter) const =0
void StartBlock(uint64_t block_offset)