diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2019-01-08 18:28:29 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2019-01-08 18:28:29 +0000 |
commit | 05cd49a362873699e03768f3a43fb4413c849d9f (patch) | |
tree | b812b0366d60b9dff1b51a86e2001a83db893559 | |
parent | 3189bc4a27480cf56867593d2e7f4ca83528b430 (diff) |
Avoid double book keeping of strictness.
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); } /** |