summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorArne Juul <arnej@yahoo-inc.com>2017-12-14 10:25:23 +0000
committerArne Juul <arnej@yahoo-inc.com>2017-12-14 10:25:23 +0000
commit23484cfa3285e5e73e51f9a8f7b3652df3c3a680 (patch)
tree7aa3bf68b8c3b4e0322e462af2edc9d8e561bdb4 /searchcore
parenta1ed0cca2a7776f68c16e784e01330d7e7d2a197 (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.cpp9
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) {