-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfilter.cc
33 lines (25 loc) · 808 Bytes
/
filter.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include "filter.h"
#include <iostream>
Filter::Filter() {
filterLevels = std::vector<FilterLevel>(maxLevel);
}
Filter::~Filter() = default;
void Filter::add(uint64_t key, int level, uint64_t filename) {
if (filterLevels[level].count(filename) == 0U) {
(void) filterLevels[level].insert({filename, BloomFilter()});
}
BloomFilter &bloomFilter = filterLevels[level][filename];
bloomFilter.add(key);
}
bool Filter::contains(uint64_t key, int level, uint64_t filename) const {
if (filterLevels[level].count(filename) == 0U) {
return false;
}
const BloomFilter &bloomFilter = filterLevels[level].at(filename);
return bloomFilter.contains(key);
}
void Filter::reset() {
filterLevels = std::vector<FilterLevel>(maxLevel);
}
void Filter::recover() {
}