23 uint64_t filter_index = (block_offset /
kFilterBase);
42 const uint32_t array_offset =
result_.size();
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;
96 uint64_t index = block_offset >>
base_lg_;
100 if (start <= limit && limit <= static_cast<size_t>(
offset_ -
data_)) {
103 }
else if (start == limit) {
void PutFixed32(std::string *dst, uint32_t value)
void StartBlock(uint64_t block_offset)
const FilterPolicy * policy_
virtual bool KeyMayMatch(const Slice &key, const Slice &filter) const =0
std::vector< size_t > start_
uint32_t DecodeFixed32(const char *ptr)
static const size_t kFilterBase
FilterBlockBuilder(const FilterPolicy *)
bool KeyMayMatch(uint64_t block_offset, const Slice &key)
void AddKey(const Slice &key)
FilterBlockReader(const FilterPolicy *policy, const Slice &contents)
const FilterPolicy * policy_
static const size_t kFilterBaseLg
std::vector< uint32_t > filter_offsets_
const char * data() const
virtual void CreateFilter(const Slice *keys, int n, std::string *dst) const =0
std::vector< Slice > tmp_keys_