aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.cpp')
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.cpp22
1 files changed, 11 insertions, 11 deletions
diff --git a/searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.cpp b/searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.cpp
index 4eb57eda911..fdf4ec950dd 100644
--- a/searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.cpp
@@ -1,4 +1,4 @@
-// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include "multibitvectoriterator.h"
#include "andsearch.h"
@@ -66,7 +66,7 @@ bool
MultiBitVector<Update>::updateLastValue(uint32_t docId) noexcept
{
if (docId >= _lastMaxDocIdLimit) {
- if (__builtin_expect(docId >= _numDocs, false)) {
+ if (__builtin_expect(isAtEnd(docId), false)) {
return true;
}
const uint32_t index(BitWord::wordNum(docId));
@@ -119,8 +119,10 @@ public:
_mbv(getChildren().size() + 1)
{
for (const auto & child : getChildren()) {
- const auto * bv = static_cast<const BitVectorIterator *>(child.get());
- _mbv.addBitVector(Meta(bv->getBitValues(), bv->isInverted()), bv->getDocIdLimit());
+ BitVectorMeta bv = child->asBitVector();
+ if (bv.valid()) {
+ _mbv.addBitVector(Meta(bv.vector()->getStart(), bv.inverted()), bv.getDocidLimit());
+ }
}
}
void initRange(uint32_t beginId, uint32_t endId) override {
@@ -145,7 +147,7 @@ public:
private:
void doSeek(uint32_t docId) override {
docId = this->_mbv.strictSeek(docId);
- if (__builtin_expect(docId >= this->getEndId(), false)) {
+ if (__builtin_expect(this->_mbv.isAtEnd(docId), false)) {
this->setAtEnd();
} else {
this->setDocId(docId);
@@ -168,9 +170,9 @@ SearchIterator::UP
MultiBitVectorIterator<Update>::andWith(UP filter, uint32_t estimate)
{
(void) estimate;
- if (filter->isBitVector() && acceptExtraFilter()) {
- const auto & bv = static_cast<const BitVectorIterator &>(*filter);
- _mbv.addBitVector(Meta(bv.getBitValues(), bv.isInverted()), bv.getDocIdLimit());
+ BitVectorMeta bv = filter->asBitVector();
+ if (bv.valid() && acceptExtraFilter()) {
+ _mbv.addBitVector(Meta(bv.vector()->getStart(), bv.inverted()), bv.getDocidLimit());
insert(getChildren().size(), std::move(filter));
_mbv.reset();
}
@@ -225,9 +227,7 @@ MultiBitVectorIteratorBase::doUnpack(uint32_t docid)
MultiSearch::doUnpack(docid);
} else {
auto &children = getChildren();
- _unpackInfo.each([&children,docid](size_t i) {
- static_cast<BitVectorIterator *>(children[i].get())->unpack(docid);
- }, children.size());
+ _unpackInfo.each([&children,docid](size_t i) { children[i]->unpack(docid); }, children.size());
}
}