@@ -318,8 +318,8 @@ class MortonFilter {
318318 size_t size;
319319public:
320320 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);
323323 this ->size = size;
324324 }
325325 ~MortonFilter () {
@@ -328,7 +328,17 @@ class MortonFilter {
328328 void Add (uint64_t key) {
329329 filter->insert (key);
330330 }
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) {
332342 return filter->likely_contains (item);
333343 };
334344 size_t SizeInBytes () const {
@@ -353,9 +363,7 @@ struct FilterAPI<MortonFilter> {
353363 table->Add (key);
354364 }
355365 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);
359367 }
360368 static void Remove (uint64_t key, Table * table) {
361369 throw std::runtime_error (" Unsupported" );
0 commit comments