diff options
author | Arne Juul <arnej@yahoo-inc.com> | 2017-12-14 10:25:23 +0000 |
---|---|---|
committer | Arne Juul <arnej@yahoo-inc.com> | 2017-12-14 10:25:23 +0000 |
commit | 23484cfa3285e5e73e51f9a8f7b3652df3c3a680 (patch) | |
tree | 7aa3bf68b8c3b4e0322e462af2edc9d8e561bdb4 /searchcore | |
parent | a1ed0cca2a7776f68c16e784e01330d7e7d2a197 (diff) |
update after review feedback
* combine loop exit criteria
* pre-size hash table
Diffstat (limited to 'searchcore')
-rw-r--r-- | searchcore/src/vespa/searchcore/fdispatch/search/mergehits.cpp | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/searchcore/src/vespa/searchcore/fdispatch/search/mergehits.cpp b/searchcore/src/vespa/searchcore/fdispatch/search/mergehits.cpp index 9a5f663c120..8c4a08a3bbb 100644 --- a/searchcore/src/vespa/searchcore/fdispatch/search/mergehits.cpp +++ b/searchcore/src/vespa/searchcore/fdispatch/search/mergehits.cpp @@ -72,6 +72,7 @@ struct GlobalIdHasher { bool insert(const document::GlobalId & g_id) { return seenSet.insert(g_id).second; } + GlobalIdHasher(size_t expected_size) : seenSet(expected_size * 3) {} }; @@ -97,13 +98,12 @@ FastS_InternalMergeHits(FastS_HitMerger<T> *merger) sortItr = sortRef; } - GlobalIdHasher seenGids; + GlobalIdHasher seenGids(end - beg); FastS_make_heap(heap, heapSize, FastS_MergeCompare<T, F>); - while (pt < end) { + while ((pt < end) && (heapSize > 0)) { node = *heap; - FastS_assert(heapSize > 0); bool useHit = seenGids.insert(node->NT_GetHit()->HT_GetGlobalID()); if (F::UseSortData()) { if (!F::DropSortData() && useHit) { @@ -119,9 +119,6 @@ FastS_InternalMergeHits(FastS_HitMerger<T> *merger) FastS_pop_push_heap(heap, heapSize, node, FastS_MergeCompare<T, F>); } else { FastS_pop_heap(heap, heapSize--, FastS_MergeCompare<T, F>); - if (heapSize == 0) { - break; - } } } if (pt != end) { |