summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2019-01-08 18:28:29 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2019-01-08 18:28:29 +0000
commit05cd49a362873699e03768f3a43fb4413c849d9f (patch)
treeb812b0366d60b9dff1b51a86e2001a83db893559
parent3189bc4a27480cf56867593d2e7f4ca83528b430 (diff)
Avoid double book keeping of strictness.
-rw-r--r--searchlib/src/tests/queryeval/multibitvectoriterator/multibitvectoriterator_test.cpp15
-rw-r--r--searchlib/src/vespa/searchlib/common/bitvectoriterator.h1
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.cpp8
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.h1
4 files changed, 13 insertions, 12 deletions
diff --git a/searchlib/src/tests/queryeval/multibitvectoriterator/multibitvectoriterator_test.cpp b/searchlib/src/tests/queryeval/multibitvectoriterator/multibitvectoriterator_test.cpp
index 89a4021d0d4..d554c3987e3 100644
--- a/searchlib/src/tests/queryeval/multibitvectoriterator/multibitvectoriterator_test.cpp
+++ b/searchlib/src/tests/queryeval/multibitvectoriterator/multibitvectoriterator_test.cpp
@@ -17,6 +17,7 @@ LOG_SETUP("multibitvectoriterator_test");
using namespace search::queryeval;
using namespace search::fef;
using namespace search;
+using vespalib::Trinary;
//-----------------------------------------------------------------------------
@@ -358,7 +359,7 @@ Test::testOptimizeCommon(bool isAnd, bool invert)
EXPECT_EQUAL(2u, m.getChildren().size());
EXPECT_TRUE(dynamic_cast<const EmptySearch *>(m.getChildren()[0]) != nullptr);
EXPECT_TRUE(dynamic_cast<const MultiBitVectorIteratorBase *>(m.getChildren()[1]) != nullptr);
- EXPECT_FALSE(dynamic_cast<const MultiBitVectorIteratorBase *>(m.getChildren()[1])->isStrict());
+ EXPECT_TRUE(Trinary::False == m.getChildren()[1]->is_strict());
}
{
MultiSearch::Children children;
@@ -374,7 +375,7 @@ Test::testOptimizeCommon(bool isAnd, bool invert)
EXPECT_EQUAL(2u, m.getChildren().size());
EXPECT_TRUE(dynamic_cast<const EmptySearch *>(m.getChildren()[0]) != nullptr);
EXPECT_TRUE(dynamic_cast<const MultiBitVectorIteratorBase *>(m.getChildren()[1]) != nullptr);
- EXPECT_TRUE(dynamic_cast<const MultiBitVectorIteratorBase *>(m.getChildren()[1])->isStrict());
+ EXPECT_TRUE(Trinary::True == m.getChildren()[1]->is_strict());
}
{
MultiSearch::Children children;
@@ -421,7 +422,7 @@ Test::testOptimizeAndOr(bool invert)
s = MultiBitVectorIteratorBase::optimize(std::move(s));
EXPECT_TRUE(s);
EXPECT_TRUE(dynamic_cast<const MultiBitVectorIteratorBase *>(s.get()) != nullptr);
- EXPECT_FALSE(dynamic_cast<const MultiBitVectorIteratorBase *>(s.get())->isStrict());
+ EXPECT_TRUE(Trinary::False == s->is_strict());
}
{
MultiSearch::Children children;
@@ -436,7 +437,7 @@ Test::testOptimizeAndOr(bool invert)
const MultiSearch & m(dynamic_cast<const MultiSearch &>(*s));
EXPECT_EQUAL(2u, m.getChildren().size());
EXPECT_TRUE(dynamic_cast<const MultiBitVectorIteratorBase *>(m.getChildren()[0]) != nullptr);
- EXPECT_FALSE(dynamic_cast<const MultiBitVectorIteratorBase *>(m.getChildren()[0])->isStrict());
+ EXPECT_TRUE(Trinary::False == m.getChildren()[0]->is_strict());
EXPECT_TRUE(dynamic_cast<const EmptySearch *>(m.getChildren()[1]) != nullptr);
}
{
@@ -452,7 +453,7 @@ Test::testOptimizeAndOr(bool invert)
const MultiSearch & m(dynamic_cast<const MultiSearch &>(*s));
EXPECT_EQUAL(2u, m.getChildren().size());
EXPECT_TRUE(dynamic_cast<const MultiBitVectorIteratorBase *>(m.getChildren()[0]) != nullptr);
- EXPECT_FALSE(dynamic_cast<const MultiBitVectorIteratorBase *>(m.getChildren()[0])->isStrict());
+ EXPECT_TRUE(Trinary::False == m.getChildren()[0]->is_strict());
EXPECT_TRUE(dynamic_cast<const EmptySearch *>(m.getChildren()[1]) != nullptr);
}
{
@@ -468,7 +469,7 @@ Test::testOptimizeAndOr(bool invert)
const MultiSearch & m(dynamic_cast<const MultiSearch &>(*s));
EXPECT_EQUAL(2u, m.getChildren().size());
EXPECT_TRUE(dynamic_cast<const MultiBitVectorIteratorBase *>(m.getChildren()[0]) != nullptr);
- EXPECT_TRUE(dynamic_cast<const MultiBitVectorIteratorBase *>(m.getChildren()[0])->isStrict());
+ EXPECT_TRUE(Trinary::True == m.getChildren()[0]->is_strict());
EXPECT_TRUE(dynamic_cast<const EmptySearch *>(m.getChildren()[1]) != nullptr);
}
{
@@ -484,7 +485,7 @@ Test::testOptimizeAndOr(bool invert)
const MultiSearch & m(dynamic_cast<const MultiSearch &>(*s));
EXPECT_EQUAL(2u, m.getChildren().size());
EXPECT_TRUE(dynamic_cast<const MultiBitVectorIteratorBase *>(m.getChildren()[0]) != nullptr);
- EXPECT_TRUE(dynamic_cast<const MultiBitVectorIteratorBase *>(m.getChildren()[0])->isStrict());
+ EXPECT_TRUE(Trinary::True == m.getChildren()[0]->is_strict());
EXPECT_TRUE(dynamic_cast<const EmptySearch *>(m.getChildren()[1]) != nullptr);
}
}
diff --git a/searchlib/src/vespa/searchlib/common/bitvectoriterator.h b/searchlib/src/vespa/searchlib/common/bitvectoriterator.h
index be19b1e1343..6200837d449 100644
--- a/searchlib/src/vespa/searchlib/common/bitvectoriterator.h
+++ b/searchlib/src/vespa/searchlib/common/bitvectoriterator.h
@@ -28,7 +28,6 @@ public:
const void *getBitValues() const { return _bv.getStart(); }
Trinary is_strict() const override { return Trinary::False; }
- virtual bool isStrict() const { return (is_strict() == Trinary::True); }
uint32_t getDocIdLimit() const { return _docIdLimit; }
static UP create(const BitVector *const other, fef::TermFieldMatchData &matchData, bool strict, bool inverted = false);
static UP create(const BitVector *const other, uint32_t docIdLimit,
diff --git a/searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.cpp b/searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.cpp
index cf660624cff..bba331284f9 100644
--- a/searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.cpp
@@ -13,6 +13,8 @@
namespace search::queryeval {
+using vespalib::Trinary;
+
namespace {
template<typename Update>
@@ -25,7 +27,7 @@ protected:
void strictSeek(uint32_t docId);
private:
void doSeek(uint32_t docId) override;
- bool isStrict() const override { return false; }
+ Trinary is_strict() const override { return Trinary::False; }
bool acceptExtraFilter() const override { return Update::isAnd(); }
Update _update;
};
@@ -37,7 +39,7 @@ public:
MultiBitVectorIteratorStrict(const MultiSearch::Children & children) : MultiBitVectorIterator<Update>(children) { }
private:
void doSeek(uint32_t docId) override { this->strictSeek(docId); }
- bool isStrict() const override { return true; }
+ Trinary is_strict() const override { return Trinary::True; }
};
template<typename Update>
@@ -211,7 +213,7 @@ MultiBitVectorIteratorBase::optimizeMultiSearch(SearchIterator::UP parentIt)
_unpackIndex.push_back(stolen.size());
}
SearchIterator::UP bit = parent.remove(it);
- if ( ! strict && static_cast<const BitVectorIterator &>(*bit).isStrict()) {
+ if ( ! strict && (bit->is_strict() == Trinary::True)) {
strict = true;
}
stolen.push_back(bit.release());
diff --git a/searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.h b/searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.h
index f233ee66fd0..cc40f834114 100644
--- a/searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.h
+++ b/searchlib/src/vespa/searchlib/queryeval/multibitvectoriterator.h
@@ -12,7 +12,6 @@ class MultiBitVectorIteratorBase : public MultiSearch, protected BitWord
{
public:
~MultiBitVectorIteratorBase();
- virtual bool isStrict() const = 0;
void initRange(uint32_t beginId, uint32_t endId) override;
void addUnpackIndex(size_t index) { _unpackInfo.add(index); }
/**