diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2023-11-21 22:22:53 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-21 22:22:53 +0100 |
commit | a77236c382b5bbe3726584478b3d00f134a686a3 (patch) | |
tree | 77ca9e0bba84da440458711fd6c2687916d0f5bc /searchlib | |
parent | d2e834db27cb30bd52d18ce97c0a70506a7f5d66 (diff) | |
parent | 6483ab09d6b0878904ef9269ca959a7d07d29af9 (diff) |
Merge pull request #29418 from vespa-engine/geirst/iterator-pack-ref-type
Adhere to the reference type used by the iterator pack.
Diffstat (limited to 'searchlib')
5 files changed, 17 insertions, 13 deletions
diff --git a/searchlib/src/vespa/searchlib/attribute/iterator_pack.cpp b/searchlib/src/vespa/searchlib/attribute/iterator_pack.cpp index 44413b42921..3dda6017e0a 100644 --- a/searchlib/src/vespa/searchlib/attribute/iterator_pack.cpp +++ b/searchlib/src/vespa/searchlib/attribute/iterator_pack.cpp @@ -2,6 +2,7 @@ #include "iterator_pack.h" #include <vespa/searchlib/common/bitvector.h> +#include <limits> namespace search { @@ -10,7 +11,7 @@ AttributeIteratorPack::~AttributeIteratorPack() = default; AttributeIteratorPack::AttributeIteratorPack(std::vector<DocumentWeightIterator> &&children) : _children(std::move(children)) { - assert(_children.size() < 0x10000); + assert(_children.size() <= std::numeric_limits<ref_t>::max()); } std::unique_ptr<BitVector> diff --git a/searchlib/src/vespa/searchlib/attribute/iterator_pack.h b/searchlib/src/vespa/searchlib/attribute/iterator_pack.h index 388dce3aeb7..04df7c9b772 100644 --- a/searchlib/src/vespa/searchlib/attribute/iterator_pack.h +++ b/searchlib/src/vespa/searchlib/attribute/iterator_pack.h @@ -15,6 +15,7 @@ private: std::vector<DocumentWeightIterator> _children; public: + using ref_t = uint16_t; AttributeIteratorPack() noexcept : _children() {} AttributeIteratorPack(AttributeIteratorPack &&rhs) noexcept = default; AttributeIteratorPack &operator=(AttributeIteratorPack &&rhs) noexcept = default; @@ -22,11 +23,11 @@ public: explicit AttributeIteratorPack(std::vector<DocumentWeightIterator> &&children); ~AttributeIteratorPack(); - uint32_t get_docid(uint16_t ref) const { + uint32_t get_docid(ref_t ref) const { return _children[ref].valid() ? _children[ref].getKey() : endDocId; } - uint32_t seek(uint16_t ref, uint32_t docid) { + uint32_t seek(ref_t ref, uint32_t docid) { _children[ref].linearSeek(docid); if (__builtin_expect(_children[ref].valid(), true)) { return _children[ref].getKey(); @@ -34,14 +35,14 @@ public: return endDocId; } - int32_t get_weight(uint16_t ref, uint32_t) { + int32_t get_weight(ref_t ref, uint32_t) { return _children[ref].getData(); } std::unique_ptr<BitVector> get_hits(uint32_t begin_id, uint32_t end_id); void or_hits_into(BitVector &result, uint32_t begin_id); - uint16_t size() const noexcept { return _children.size(); } + ref_t size() const noexcept { return _children.size(); } void initRange(uint32_t begin, uint32_t end) { (void) end; for (auto &child: _children) { @@ -49,7 +50,7 @@ public: } } private: - uint32_t next(uint16_t ref) { + uint32_t next(ref_t ref) { ++_children[ref]; return get_docid(ref); } diff --git a/searchlib/src/vespa/searchlib/queryeval/iterator_pack.cpp b/searchlib/src/vespa/searchlib/queryeval/iterator_pack.cpp index 8c56a6694dc..fdea54424de 100644 --- a/searchlib/src/vespa/searchlib/queryeval/iterator_pack.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/iterator_pack.cpp @@ -4,6 +4,7 @@ #include "termwise_helper.h" #include <vespa/searchlib/fef/matchdata.h> #include <cassert> +#include <limits> namespace search::queryeval { @@ -28,7 +29,7 @@ SearchIteratorPack::SearchIteratorPack(const std::vector<SearchIterator*> &child _children.emplace_back(child); } assert((_children.size() == _childMatch.size()) || _childMatch.empty()); - assert(_children.size() < 0x10000); + assert(_children.size() <= std::numeric_limits<ref_t>::max()); } SearchIteratorPack::SearchIteratorPack(const std::vector<SearchIterator*> &children, MatchDataUP md) diff --git a/searchlib/src/vespa/searchlib/queryeval/iterator_pack.h b/searchlib/src/vespa/searchlib/queryeval/iterator_pack.h index ce0c47f0882..0a1b140f28a 100644 --- a/searchlib/src/vespa/searchlib/queryeval/iterator_pack.h +++ b/searchlib/src/vespa/searchlib/queryeval/iterator_pack.h @@ -18,6 +18,7 @@ private: MatchDataUP _md; public: + using ref_t = uint16_t; SearchIteratorPack(); ~SearchIteratorPack(); SearchIteratorPack(SearchIteratorPack &&rhs) noexcept; @@ -31,25 +32,25 @@ public: // TODO: use MultiSearch::Children to pass ownership SearchIteratorPack(const std::vector<SearchIterator*> &children, MatchDataUP md); - uint32_t get_docid(uint16_t ref) const { + uint32_t get_docid(ref_t ref) const { return _children[ref]->getDocId(); } - uint32_t seek(uint16_t ref, uint32_t docid) { + uint32_t seek(ref_t ref, uint32_t docid) { _children[ref]->seek(docid); return _children[ref]->getDocId(); } - int32_t get_weight(uint16_t ref, uint32_t docid) { + int32_t get_weight(ref_t ref, uint32_t docid) { _children[ref]->doUnpack(docid); return _childMatch[ref]->getWeight(); } - void unpack(uint16_t ref, uint32_t docid) { + void unpack(ref_t ref, uint32_t docid) { _children[ref]->doUnpack(docid); } - uint16_t size() const { return _children.size(); } + ref_t size() const { return _children.size(); } void initRange(uint32_t begin, uint32_t end) { for (auto & child: _children) { child->initRange(begin, end); diff --git a/searchlib/src/vespa/searchlib/queryeval/weighted_set_term_search.cpp b/searchlib/src/vespa/searchlib/queryeval/weighted_set_term_search.cpp index cc37433a696..32ae321e031 100644 --- a/searchlib/src/vespa/searchlib/queryeval/weighted_set_term_search.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/weighted_set_term_search.cpp @@ -18,7 +18,7 @@ template <typename HEAP, typename IteratorPack> class WeightedSetTermSearchImpl : public WeightedSetTermSearch { private: - using ref_t = uint32_t; + using ref_t = IteratorPack::ref_t; struct CmpDocId { const uint32_t *termPos; |