@@ -318,8 +318,8 @@ class MortonFilter {
318
318
size_t size;
319
319
public:
320
320
MortonFilter (const size_t size) {
321
- // filter = new Morton3_8((size_t) (size / 0.50 ) + 64);
322
- filter = new Morton3_8 ((size_t ) (2.1 * size) + 64 );
321
+ filter = new Morton3_8 ((size_t ) (size / 0.95 ) + 64 );
322
+ // filter = new Morton3_8((size_t) (2.1 * size) + 64);
323
323
this ->size = size;
324
324
}
325
325
~MortonFilter () {
@@ -328,7 +328,17 @@ class MortonFilter {
328
328
void Add (uint64_t key) {
329
329
filter->insert (key);
330
330
}
331
- bool Contain (uint64_t &item) {
331
+ void AddAll (const vector<uint64_t > keys, const size_t start, const size_t end) {
332
+ size_t size = end - start;
333
+ ::std::vector<uint64_t > k (size);
334
+ ::std::vector<bool > status (size);
335
+ for (size_t i = start; i < end; i++) {
336
+ k[i - start] = keys[i];
337
+ }
338
+ // TODO return value and status is ignored currently
339
+ filter->insert_many (k, status, size);
340
+ }
341
+ inline bool Contain (uint64_t &item) {
332
342
return filter->likely_contains (item);
333
343
};
334
344
size_t SizeInBytes () const {
@@ -353,9 +363,7 @@ struct FilterAPI<MortonFilter> {
353
363
table->Add (key);
354
364
}
355
365
static void AddAll (const vector<uint64_t > keys, const size_t start, const size_t end, Table* table) {
356
- for (size_t i = start; i < end; i++) {
357
- table->Add (keys[i]);
358
- }
366
+ table->AddAll (keys, start, end);
359
367
}
360
368
static void Remove (uint64_t key, Table * table) {
361
369
throw std::runtime_error (" Unsupported" );
0 commit comments