diff options
16 files changed, 200 insertions, 124 deletions
diff --git a/searchlib/src/tests/common/bitvector/bitvector_test.cpp b/searchlib/src/tests/common/bitvector/bitvector_test.cpp index db29ab9881f..f53d15d6dc4 100644 --- a/searchlib/src/tests/common/bitvector/bitvector_test.cpp +++ b/searchlib/src/tests/common/bitvector/bitvector_test.cpp @@ -300,15 +300,59 @@ TEST("requireThatInitRangeStaysWithinBounds") { EXPECT_TRUE(it->isAtEnd()); } +void +setEveryNthBit(uint32_t n, BitVector & bv, uint32_t offset, uint32_t end) { + for (uint32_t i(0); i < (end - offset); i++) { + if ((i % n) == 0) { + bv.setBit(offset + i); + } else { + bv.clearBit(offset + i); + } + } + bv.invalidateCachedCount(); +} +BitVector::UP +createEveryNthBitSet(uint32_t n, uint32_t offset, uint32_t sz) { + BitVector::UP bv(BitVector::create(offset, offset + sz)); + setEveryNthBit(n, *bv, offset, offset + sz); + return bv; +} + +template<typename Func> +void +verifyThatLongerWithShorterWorksAsZeroPadded(uint32_t offset, uint32_t sz1, uint32_t sz2, Func func) { + BitVector::UP aLarger = createEveryNthBitSet(2, offset, sz2); + + BitVector::UP bSmall = createEveryNthBitSet(3, 0, offset + sz1); + BitVector::UP bLarger = createEveryNthBitSet(3, 0, offset + sz2); + BitVector::UP bEmpty = createEveryNthBitSet(3, 0, 0); + bLarger->clearInterval(offset + sz1, offset + sz2); + EXPECT_EQUAL(bSmall->countTrueBits(), bLarger->countTrueBits()); + + BitVector::UP aLarger2 = BitVector::create(*aLarger, aLarger->getStartIndex(), aLarger->size()); + BitVector::UP aLarger3 = BitVector::create(*aLarger, aLarger->getStartIndex(), aLarger->size()); + EXPECT_TRUE(*aLarger == *aLarger2); + EXPECT_TRUE(*aLarger == *aLarger3); + func(*aLarger, *bLarger); + func(*aLarger2, *bSmall); + func(*aLarger3, *bEmpty); + EXPECT_TRUE(*aLarger == *aLarger2); + //EXPECT_TRUE(*aLarger == *aLarger3); +} + TEST("requireThatAndWorks") { for (uint32_t offset(0); offset < 100; offset++) { testAnd(offset); + verifyThatLongerWithShorterWorksAsZeroPadded(offset, offset+256, offset+256 + offset + 3, + [](BitVector & a, const BitVector & b) { a.andWith(b); }); } } TEST("requireThatOrWorks") { for (uint32_t offset(0); offset < 100; offset++) { testOr(offset); + verifyThatLongerWithShorterWorksAsZeroPadded(offset, offset+256, offset+256 + offset + 3, + [](BitVector & a, const BitVector & b) { a.orWith(b); }); } } @@ -316,9 +360,22 @@ TEST("requireThatOrWorks") { TEST("requireThatAndNotWorks") { for (uint32_t offset(0); offset < 100; offset++) { testAndNot(offset); + verifyThatLongerWithShorterWorksAsZeroPadded(offset, offset+256, offset+256 + offset + 3, + [](BitVector & a, const BitVector & b) { a.andNotWith(b); }); } } +TEST("test that empty bitvectors does not crash") { + BitVector::UP empty = BitVector::create(0); + EXPECT_EQUAL(0u, empty->countTrueBits()); + EXPECT_EQUAL(0u, empty->countInterval(0, 100)); + empty->setInterval(0,17); + EXPECT_EQUAL(0u, empty->countInterval(0, 100)); + empty->clearInterval(0,17); + EXPECT_EQUAL(0u, empty->countInterval(0, 100)); + empty->notSelf(); + EXPECT_EQUAL(0u, empty->countInterval(0, 100)); +} TEST("requireThatNotWorks") { for (uint32_t offset(0); offset < 100; offset++) { diff --git a/searchlib/src/vespa/searchlib/common/allocatedbitvector.cpp b/searchlib/src/vespa/searchlib/common/allocatedbitvector.cpp index 08a3847f00d..3add7d1a328 100644 --- a/searchlib/src/vespa/searchlib/common/allocatedbitvector.cpp +++ b/searchlib/src/vespa/searchlib/common/allocatedbitvector.cpp @@ -130,9 +130,9 @@ AllocatedBitVector::grow(Index newSize, Index newCapacity) swap(tbv); } else { if (newSize > size()) { - Index oldSz(size()); + Range clearRange(size(), newSize); setSize(newSize); - clearIntervalNoInvalidation(oldSz, newSize); + clearIntervalNoInvalidation(clearRange); } else { clearInterval(newSize, size()); setSize(newSize); diff --git a/searchlib/src/vespa/searchlib/common/bitvector.cpp b/searchlib/src/vespa/searchlib/common/bitvector.cpp index 2e70e9f2603..96234e373dc 100644 --- a/searchlib/src/vespa/searchlib/common/bitvector.cpp +++ b/searchlib/src/vespa/searchlib/common/bitvector.cpp @@ -20,12 +20,12 @@ using vespalib::alloc::Alloc; namespace { -void verifyContains(const search::BitVector & a, const search::BitVector & b) __attribute__((noinline)); +void verifyInclusiveStart(const search::BitVector & a, const search::BitVector & b) __attribute__((noinline)); -void verifyContains(const search::BitVector & a, const search::BitVector & b) +void verifyInclusiveStart(const search::BitVector & a, const search::BitVector & b) { - if ((a.getStartIndex() < b.getStartIndex()) || (a.size() > b.size())) { - throw IllegalArgumentException(make_string("[%d, %d] is not contained in [%d, %d]", + if (a.getStartIndex() < b.getStartIndex()) { + throw IllegalArgumentException(make_string("[%d, %d] starts before which is not allowed currently [%d, %d]", a.getStartIndex(), a.size(), b.getStartIndex(), b.size()), VESPA_STRLOC); } @@ -85,44 +85,46 @@ BitVector::clear() void BitVector::clearInterval(Index start, Index end) { - clearIntervalNoInvalidation(start, end); + clearIntervalNoInvalidation(Range(start, end)); invalidateCachedCount(); } void -BitVector::clearIntervalNoInvalidation(Index start, Index end) +BitVector::clearIntervalNoInvalidation(Range range_in) { - if (start >= end) { return; } + Range range = sanitize(range_in); + if ( ! range.validNonZero()) { return; } - Index last = std::min(end, size()) - 1; - Index startw = wordNum(start); + Index last = range.end() - 1; + Index startw = wordNum(range.start()); Index endw = wordNum(last); if (endw > startw) { - _words[startw++] &= startBits(start); + _words[startw++] &= startBits(range.start()); memset(_words+startw, 0, sizeof(*_words)*(endw-startw)); _words[endw] &= endBits(last); } else { - _words[startw] &= (startBits(start) | endBits(last)); + _words[startw] &= (startBits(range.start()) | endBits(last)); } } void -BitVector::setInterval(Index start, Index end) +BitVector::setInterval(Index start_in, Index end_in) { - if (start >= end) { return; } + Range range = sanitize(Range(start_in, end_in)); + if ( ! range.validNonZero()) { return; } - Index last = std::min(end, size()) - 1; - Index startw = wordNum(start); + Index last = range.end() - 1; + Index startw = wordNum(range.start()); Index endw = wordNum(last); if (endw > startw) { - _words[startw++] |= checkTab(start); + _words[startw++] |= checkTab(range.start()); memset(_words + startw, 0xff, sizeof(*_words)*(endw-startw)); _words[endw] |= ~endBits(last); } else { - _words[startw] |= ~(startBits(start) | endBits(last)); + _words[startw] |= ~(startBits(range.start()) | endBits(last)); } invalidateCachedCount(); @@ -131,28 +133,28 @@ BitVector::setInterval(Index start, Index end) BitVector::Index BitVector::count() const { - // Subtract by one to compensate for guard bit - return countInterval(getStartIndex(), getEndIndex()); + return countInterval(Range(getStartIndex(), size())); } BitVector::Index -BitVector::countInterval(Index start, Index end) const +BitVector::countInterval(Range range_in) const { - if (start >= end) return 0; + Range range = sanitize(range_in); + if ( ! range.validNonZero()) { return 0; } - Index last = std::min(end, size()) - 1; + Index last = range.end() - 1; // Count bits in range [start..end> - Index startw = wordNum(start); + Index startw = wordNum(range.start()); Index endw = wordNum(last); Word *bitValues = _words; if (startw == endw) { - return Optimized::popCount(bitValues[startw] & ~(startBits(start) | endBits(last))); + return Optimized::popCount(bitValues[startw] & ~(startBits(range.start()) | endBits(last))); } Index res = 0; // Limit to full words - if ((start & (WordLen - 1)) != 0) { - res += Optimized::popCount(bitValues[startw] & ~startBits(start)); + if ((range.start() & (WordLen - 1)) != 0) { + res += Optimized::popCount(bitValues[startw] & ~startBits(range.start())); ++startw; } // Align start to 16 bytes @@ -177,9 +179,20 @@ BitVector::countInterval(Index start, Index end) const void BitVector::orWith(const BitVector & right) { - verifyContains(*this, right); - IAccelrated::getAccelrator().orBit(getActiveStart(), right.getWordIndex(getStartIndex()), getActiveBytes()); - + verifyInclusiveStart(*this, right); + + if (right.size() < size()) { + if (right.size() > 0) { + ssize_t commonBytes = numActiveBytes(getStartIndex(), right.size()) - sizeof(Word); + if (commonBytes > 0) { + IAccelrated::getAccelrator().orBit(getActiveStart(), right.getWordIndex(getStartIndex()), commonBytes); + } + Index last(right.size() - 1); + getWordIndex(last)[0] |= (right.getWordIndex(last)[0] & ~endBits(last)); + } + } else { + IAccelrated::getAccelrator().orBit(getActiveStart(), right.getWordIndex(getStartIndex()), getActiveBytes()); + } repairEnds(); invalidateCachedCount(); } @@ -187,11 +200,12 @@ BitVector::orWith(const BitVector & right) void BitVector::repairEnds() { - if (size() == 0) return; - Index start(getStartIndex()); - Index last(size() - 1); - getWordIndex(start)[0] &= ~startBits(start); - getWordIndex(last)[0] &= ~endBits(last); + if (size() != 0) { + Index start(getStartIndex()); + Index last(size() - 1); + getWordIndex(start)[0] &= ~startBits(start); + getWordIndex(last)[0] &= ~endBits(last); + } setGuardBit(); } @@ -199,11 +213,15 @@ BitVector::repairEnds() void BitVector::andWith(const BitVector & right) { - verifyContains(*this, right); + verifyInclusiveStart(*this, right); - IAccelrated::getAccelrator().andBit(getActiveStart(), right.getWordIndex(getStartIndex()), getActiveBytes()); + uint32_t commonBytes = std::min(getActiveBytes(), numActiveBytes(getStartIndex(), right.size())); + IAccelrated::getAccelrator().andBit(getActiveStart(), right.getWordIndex(getStartIndex()), commonBytes); + if (right.size() < size()) { + clearInterval(right.size(), size()); + } - setGuardBit(); + repairEnds(); invalidateCachedCount(); } @@ -211,11 +229,22 @@ BitVector::andWith(const BitVector & right) void BitVector::andNotWith(const BitVector& right) { - verifyContains(*this, right); - - IAccelrated::getAccelrator().andNotBit(getActiveStart(), right.getWordIndex(getStartIndex()), getActiveBytes()); + verifyInclusiveStart(*this, right); + + if (right.size() < size()) { + if (right.size() > 0) { + ssize_t commonBytes = numActiveBytes(getStartIndex(), right.size()) - sizeof(Word); + if (commonBytes > 0) { + IAccelrated::getAccelrator().andNotBit(getActiveStart(), right.getWordIndex(getStartIndex()), commonBytes); + } + Index last(right.size() - 1); + getWordIndex(last)[0] &= ~(right.getWordIndex(last)[0] & ~endBits(last)); + } + } else { + IAccelrated::getAccelrator().andNotBit(getActiveStart(), right.getWordIndex(getStartIndex()), getActiveBytes()); + } - setGuardBit(); + repairEnds(); invalidateCachedCount(); } @@ -329,8 +358,8 @@ BitVector::create(Index start, Index end) BitVector::UP BitVector::create(const BitVector & org, Index start, Index end) { - return (start == 0) - ? create(end) + return ((start == 0) && (end == org.size()) && (org.getStartIndex() == 0)) + ? create(org) : std::make_unique<PartialBitVector>(org, start, end); } diff --git a/searchlib/src/vespa/searchlib/common/bitvector.h b/searchlib/src/vespa/searchlib/common/bitvector.h index 9671e41df24..951a8ec9d88 100644 --- a/searchlib/src/vespa/searchlib/common/bitvector.h +++ b/searchlib/src/vespa/searchlib/common/bitvector.h @@ -23,10 +23,20 @@ class PartialBitVector; class BitVector : protected BitWord { public: - typedef BitWord::Index Index; - typedef vespalib::GenerationHolder GenerationHolder; - typedef vespalib::GenerationHeldBase GenerationHeldBase; - typedef std::unique_ptr<BitVector> UP; + using Index = BitWord::Index; + using GenerationHolder = vespalib::GenerationHolder; + using GenerationHeldBase = vespalib::GenerationHeldBase; + using UP = std::unique_ptr<BitVector>; + class Range { + public: + Range(Index start_in, Index end_in) : _start(start_in), _end(end_in) {} + Index start() const { return _start; } + Index end() const { return _end; } + bool validNonZero() const { return _end > _start; } + private: + Index _start; + Index _end; + }; BitVector(const BitVector &) = delete; BitVector& operator = (const BitVector &) = delete; virtual ~BitVector() = default; @@ -56,7 +66,6 @@ public: * @return The Index of the first valid bit of the bitvector. */ Index getStartIndex() const { return _startOffset; } - Index getEndIndex() const { return getStartIndex() + size(); } /** * Get next bit set in the bitvector (inclusive start). @@ -73,7 +82,7 @@ public: } /** - * Iterate over all true bits in th einclusive range. + * Iterate over all true bits in the inclusive range. * * @param func callback * @param start first bit @@ -86,7 +95,7 @@ public: } /** - * Iterate over all true bits in th einclusive range. + * Iterate over all true bits in the inclusive range. * * @param func callback * @param start first bit @@ -207,7 +216,10 @@ public: * @param start first bit to be counted * @param end limit */ - Index countInterval(Index start, Index end) const; + Index countInterval(Index start, Index end) const { + return countInterval(Range(start, end)); + } + Index countInterval(Range range) const; /** * Perform an andnot with an internal array representation. @@ -257,7 +269,7 @@ protected: void init(void * buf, Index start, Index end); void updateCount() const { _numTrueBits.store(count(), std::memory_order_relaxed); } void setTrueBits(Index numTrueBits) { _numTrueBits.store(numTrueBits, std::memory_order_relaxed); } - VESPA_DLL_LOCAL void clearIntervalNoInvalidation(Index start, Index end); + VESPA_DLL_LOCAL void clearIntervalNoInvalidation(Range range); bool isValidCount() const { return isValidCount(_numTrueBits.load(std::memory_order_relaxed)); } static bool isValidCount(Index v) { return v != invalidCount(); } static Index numWords(Index bits) { return wordNum(bits + 1 + (WordLen - 1)); } @@ -283,7 +295,9 @@ private: Index getActiveSize() const { return size() - getStartIndex(); } size_t getActiveBytes() const { return numActiveBytes(getStartIndex(), size()); } size_t numActiveWords() const { return numActiveWords(getStartIndex(), size()); } - static size_t numActiveWords(Index start, Index end) { return (numWords(end) - wordNum(start)); } + static size_t numActiveWords(Index start, Index end) { + return (end >= start) ? (numWords(end) - wordNum(start)) : 0; + } static Index invalidCount() { return std::numeric_limits<Index>::max(); } void setGuardBit() { setBit(size()); } void incNumBits() { @@ -298,6 +312,10 @@ private: } } VESPA_DLL_LOCAL void repairEnds(); + Range sanitize(Range range) const { + return Range(std::max(range.start(), getStartIndex()), + std::min(range.end(), size())); + } Index count() const; bool hasTrueBitsInternal() const; template <typename FunctionType, typename WordConverter> diff --git a/searchlib/src/vespa/searchlib/queryeval/andsearch.cpp b/searchlib/src/vespa/searchlib/queryeval/andsearch.cpp index 57d7e8c7506..3cbb30e5f89 100644 --- a/searchlib/src/vespa/searchlib/queryeval/andsearch.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/andsearch.cpp @@ -5,8 +5,7 @@ #include "termwise_helper.h" #include <vespa/searchlib/common/bitvector.h> -namespace search { -namespace queryeval { +namespace search::queryeval { BitVector::UP AndSearch::get_hits(uint32_t begin_id) { @@ -24,12 +23,14 @@ AndSearch::and_hits_into(BitVector &result, uint32_t begin_id) TermwiseHelper::andChildren(result, getChildren().begin(), getChildren().end(), begin_id); } -SearchIterator::UP AndSearch::andWith(UP filter, uint32_t estimate_) +SearchIterator::UP +AndSearch::andWith(UP filter, uint32_t estimate_) { return offerFilterToChildren(std::move(filter), estimate_); } -SearchIterator::UP AndSearch::offerFilterToChildren(UP filter, uint32_t estimate_) +SearchIterator::UP +AndSearch::offerFilterToChildren(UP filter, uint32_t estimate_) { const Children & children(getChildren()); for (uint32_t i(0); filter && (i < children.size()); ++i) { @@ -38,7 +39,8 @@ SearchIterator::UP AndSearch::offerFilterToChildren(UP filter, uint32_t estimate return filter; } -void AndSearch::doUnpack(uint32_t docid) +void +AndSearch::doUnpack(uint32_t docid) { const Children & children(getChildren()); for (uint32_t i(0); i < children.size(); ++i) { @@ -126,5 +128,4 @@ AndSearch::create(const MultiSearch::Children &children, bool strict, const Unpa } } -} // namespace queryeval -} // namespace search +} diff --git a/searchlib/src/vespa/searchlib/queryeval/simplesearch.cpp b/searchlib/src/vespa/searchlib/queryeval/simplesearch.cpp index 58f217f106f..1e5ba8d0c27 100644 --- a/searchlib/src/vespa/searchlib/queryeval/simplesearch.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/simplesearch.cpp @@ -3,8 +3,7 @@ #include "simplesearch.h" #include <vespa/vespalib/objects/visit.h> -namespace search { -namespace queryeval { +namespace search::queryeval { void SimpleSearch::doSeek(uint32_t docid) @@ -38,9 +37,6 @@ SimpleSearch::visitMembers(vespalib::ObjectVisitor &visitor) const visit(visitor, "tag", _tag); } -SimpleSearch::~SimpleSearch() -{ -} +SimpleSearch::~SimpleSearch() = default; -} // namespace queryeval -} // namespace search +} diff --git a/searchlib/src/vespa/searchlib/queryeval/simplesearch.h b/searchlib/src/vespa/searchlib/queryeval/simplesearch.h index f8a9c61a393..8dfec9abd4a 100644 --- a/searchlib/src/vespa/searchlib/queryeval/simplesearch.h +++ b/searchlib/src/vespa/searchlib/queryeval/simplesearch.h @@ -5,8 +5,7 @@ #include "searchiterator.h" #include "simpleresult.h" -namespace search { -namespace queryeval { +namespace search::queryeval { /** * Simple search class used to return a predefined set of @@ -36,6 +35,4 @@ public: ~SimpleSearch(); }; -} // namespace queryeval -} // namespace search - +} diff --git a/searchlib/src/vespa/searchlib/queryeval/sourceblendersearch.cpp b/searchlib/src/vespa/searchlib/queryeval/sourceblendersearch.cpp index 23a0d2d52a6..3280e0ac2cc 100644 --- a/searchlib/src/vespa/searchlib/queryeval/sourceblendersearch.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/sourceblendersearch.cpp @@ -6,8 +6,7 @@ #include <vespa/vespalib/objects/visit.hpp> #include <vespa/vespalib/util/array.hpp> -namespace search { -namespace queryeval { +namespace search::queryeval { EmptySearch SourceBlenderSearch::_emptySearch; @@ -91,13 +90,13 @@ SourceBlenderSearchStrict::advance() return; } search = getSearch(_sourceSelector->getSource(minNextId)); - for (uint32_t i = 0; i < _nextChildren.size(); ++i) { - if (_nextChildren[i] == search) { + for (SearchIterator * child : _nextChildren) { + if (child == search) { _matchedChild = search; setDocId(minNextId); return; } - _nextChildren[i]->seek(minNextId + 1); + child->seek(minNextId + 1); } } } @@ -111,7 +110,7 @@ SourceBlenderSearch::doUnpack(uint32_t docid) SourceBlenderSearch::SourceBlenderSearch( std::unique_ptr<sourceselector::Iterator> sourceSelector, const Children &children) : - _matchedChild(NULL), + _matchedChild(nullptr), _sourceSelector(std::move(sourceSelector)), _children(), _docIdLimit(_sourceSelector->getDocIdLimit()) @@ -155,7 +154,7 @@ SourceBlenderSearch::~SourceBlenderSearch() void SourceBlenderSearch::setChild(size_t index, SearchIterator::UP child) { - assert(_sources[_children[index]] == NULL); + assert(_sources[_children[index]] == nullptr); _sources[_children[index]] = child.release(); } @@ -170,9 +169,7 @@ SourceBlenderSearch::create(std::unique_ptr<sourceselector::Iterator> sourceSele } } - -} // namespace queryeval -} // namespace search +} void visit(vespalib::ObjectVisitor &self, const vespalib::string &name, const search::queryeval::SourceBlenderSearch::Child &obj) diff --git a/searchlib/src/vespa/searchlib/queryeval/sourceblendersearch.h b/searchlib/src/vespa/searchlib/queryeval/sourceblendersearch.h index 3e51f7f6a1b..9b4d8f58034 100644 --- a/searchlib/src/vespa/searchlib/queryeval/sourceblendersearch.h +++ b/searchlib/src/vespa/searchlib/queryeval/sourceblendersearch.h @@ -6,8 +6,7 @@ #include "emptysearch.h" #include <vector> -namespace search { -namespace queryeval { +namespace search::queryeval { namespace sourceselector { class Iterator; } /** @@ -29,7 +28,7 @@ public: struct Child { SearchIterator *search; uint32_t sourceId; - Child() : search(NULL), sourceId(0) { } + Child() : search(nullptr), sourceId(0) { } Child(SearchIterator *s, uint32_t id) : search(s), sourceId(id) {} }; typedef std::vector<Child> Children; @@ -71,19 +70,18 @@ public: **/ static SourceBlenderSearch * create(std::unique_ptr<Iterator> sourceSelector, const Children &children, bool strict); - virtual ~SourceBlenderSearch(); + ~SourceBlenderSearch() override; size_t getNumChildren() const { return _children.size(); } SearchIterator::UP steal(size_t index) { SearchIterator::UP retval(_sources[_children[index]]); - _sources[_children[index]] = NULL; + _sources[_children[index]] = nullptr; return retval; } void setChild(size_t index, SearchIterator::UP child); void initRange(uint32_t beginId, uint32_t endId) override; }; -} // namespace queryeval -} // namespace search +} void visit(vespalib::ObjectVisitor &self, const vespalib::string &name, const search::queryeval::SourceBlenderSearch::Child &obj); diff --git a/searchlib/src/vespa/searchlib/queryeval/termwise_blueprint_helper.cpp b/searchlib/src/vespa/searchlib/queryeval/termwise_blueprint_helper.cpp index 3eddda57ccc..ae21fd93ba3 100644 --- a/searchlib/src/vespa/searchlib/queryeval/termwise_blueprint_helper.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/termwise_blueprint_helper.cpp @@ -3,8 +3,7 @@ #include "termwise_blueprint_helper.h" #include "termwise_search.h" -namespace search { -namespace queryeval { +namespace search::queryeval { TermwiseBlueprintHelper::TermwiseBlueprintHelper(const IntermediateBlueprint &self, const MultiSearch::Children &subSearches, @@ -32,7 +31,7 @@ TermwiseBlueprintHelper::TermwiseBlueprintHelper(const IntermediateBlueprint &se } } -TermwiseBlueprintHelper::~TermwiseBlueprintHelper() { } +TermwiseBlueprintHelper::~TermwiseBlueprintHelper() = default; void TermwiseBlueprintHelper::insert_termwise(SearchIterator::UP search, bool strict) @@ -41,5 +40,4 @@ TermwiseBlueprintHelper::insert_termwise(SearchIterator::UP search, bool strict) children.insert(children.begin() + first_termwise, termwise_search.release()); } -} // namespace queryeval -} // namespace search +} diff --git a/searchlib/src/vespa/searchlib/queryeval/termwise_blueprint_helper.h b/searchlib/src/vespa/searchlib/queryeval/termwise_blueprint_helper.h index 335daeae7f0..e6b46cfb7d2 100644 --- a/searchlib/src/vespa/searchlib/queryeval/termwise_blueprint_helper.h +++ b/searchlib/src/vespa/searchlib/queryeval/termwise_blueprint_helper.h @@ -7,8 +7,7 @@ #include "unpackinfo.h" #include "searchiterator.h" -namespace search { -namespace queryeval { +namespace search::queryeval { /** * Utility used to keep track of which children can be evaluated @@ -28,5 +27,4 @@ struct TermwiseBlueprintHelper { void insert_termwise(SearchIterator::UP search, bool strict); }; -} // namespace queryeval -} // namespace search +} diff --git a/searchlib/src/vespa/searchlib/queryeval/termwise_helper.h b/searchlib/src/vespa/searchlib/queryeval/termwise_helper.h index d2be71f3ab8..8abcf6e0e42 100644 --- a/searchlib/src/vespa/searchlib/queryeval/termwise_helper.h +++ b/searchlib/src/vespa/searchlib/queryeval/termwise_helper.h @@ -5,9 +5,7 @@ #include "searchiterator.h" #include <vespa/searchlib/common/bitvector.h> -namespace search { - -namespace queryeval { +namespace search::queryeval { /** * Helper methods for doing termwise evaluation. @@ -132,4 +130,3 @@ TermwiseHelper::orIterators(BitVector & result, IT begin, IT end, uint32_t begin } } -} diff --git a/searchlib/src/vespa/searchlib/queryeval/termwise_search.cpp b/searchlib/src/vespa/searchlib/queryeval/termwise_search.cpp index e7df5aa6bae..2f00b249795 100644 --- a/searchlib/src/vespa/searchlib/queryeval/termwise_search.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/termwise_search.cpp @@ -4,8 +4,7 @@ #include <vespa/vespalib/objects/visit.h> #include <vespa/searchlib/common/bitvector.h> -namespace search { -namespace queryeval { +namespace search::queryeval { template <bool IS_STRICT> struct TermwiseSearch : public SearchIterator { @@ -64,5 +63,4 @@ make_termwise(SearchIterator::UP search, bool strict) } } -} // namespace queryeval -} // namespace search +} diff --git a/searchlib/src/vespa/searchlib/queryeval/termwise_search.h b/searchlib/src/vespa/searchlib/queryeval/termwise_search.h index 2446c5dc847..193f2f86ed7 100644 --- a/searchlib/src/vespa/searchlib/queryeval/termwise_search.h +++ b/searchlib/src/vespa/searchlib/queryeval/termwise_search.h @@ -4,8 +4,7 @@ #include "searchiterator.h" -namespace search { -namespace queryeval { +namespace search::queryeval { /** * Creates a termwise wrapper for the given search. The wrapper will @@ -23,5 +22,4 @@ namespace queryeval { **/ SearchIterator::UP make_termwise(SearchIterator::UP search, bool strict); -} // namespace queryeval -} // namespace search +} diff --git a/searchlib/src/vespa/searchlib/queryeval/truesearch.cpp b/searchlib/src/vespa/searchlib/queryeval/truesearch.cpp index a5a179230e5..b585647fb3e 100644 --- a/searchlib/src/vespa/searchlib/queryeval/truesearch.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/truesearch.cpp @@ -2,8 +2,7 @@ #include "truesearch.h" -namespace search { -namespace queryeval { +namespace search::queryeval { void TrueSearch::doSeek(uint32_t docid) @@ -24,9 +23,6 @@ TrueSearch::TrueSearch(fef::TermFieldMatchData & tfmd) : _tfmd.resetOnlyDocId(0); } -TrueSearch::~TrueSearch() -{ -} +TrueSearch::~TrueSearch() = default; -} // namespace queryeval -} // namespace search +} diff --git a/searchlib/src/vespa/searchlib/queryeval/truesearch.h b/searchlib/src/vespa/searchlib/queryeval/truesearch.h index deaafd82351..6cf1e4dec02 100644 --- a/searchlib/src/vespa/searchlib/queryeval/truesearch.h +++ b/searchlib/src/vespa/searchlib/queryeval/truesearch.h @@ -2,11 +2,10 @@ #pragma once -#include <vespa/searchlib/fef/termfieldmatchdata.h> #include "searchiterator.h" +#include <vespa/searchlib/fef/termfieldmatchdata.h> -namespace search { -namespace queryeval { +namespace search::queryeval { class TrueSearch : public SearchIterator { @@ -21,5 +20,4 @@ public: ~TrueSearch(); }; -} // namespace queryeval -} // namespace search +} |