diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2023-07-04 09:43:32 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2023-07-04 09:43:32 +0000 |
commit | 60cf91de5ef6e329d0341d70dffa71a0240713b9 (patch) | |
tree | 501d4d403052cb5971e9d776a586b369e9d05b2e /searchcore | |
parent | ecaf9bd3a532ac937895fb7bc861174a583f874b (diff) |
- Move shared_ptr
- Refactor for readability.
Diffstat (limited to 'searchcore')
4 files changed, 43 insertions, 34 deletions
diff --git a/searchcore/src/vespa/searchcore/grouping/groupingcontext.cpp b/searchcore/src/vespa/searchcore/grouping/groupingcontext.cpp index 08bbf422674..da33c43eca7 100644 --- a/searchcore/src/vespa/searchcore/grouping/groupingcontext.cpp +++ b/searchcore/src/vespa/searchcore/grouping/groupingcontext.cpp @@ -32,7 +32,7 @@ size_t GroupingContext::countFS4Hits() { size_t numFs4Hits(0); - for (GroupingPtr & g : _groupingList) { + for (auto & g : _groupingList) { CountFS4Hits counter; g->select(counter, counter); numFs4Hits += counter.getHitCount(); @@ -43,7 +43,7 @@ GroupingContext::countFS4Hits() void GroupingContext::setDistributionKey(uint32_t distributionKey) { - for (GroupingPtr & g : _groupingList) { + for (auto & g : _groupingList) { FS4HitSetDistributionKey updater(distributionKey); g->select(updater, updater); } @@ -77,9 +77,9 @@ GroupingContext::GroupingContext(const GroupingContext & rhs) : { } void -GroupingContext::addGrouping(const GroupingPtr & g) +GroupingContext::addGrouping(std::shared_ptr<Grouping> g) { - _groupingList.push_back(g); + _groupingList.push_back(std::move(g)); } void @@ -88,9 +88,8 @@ GroupingContext::serialize() vespalib::NBOSerializer nos(_os); nos << (uint32_t)_groupingList.size(); - for (size_t i = 0; i < _groupingList.size(); i++) { - search::aggregation::Grouping & grouping(*_groupingList[i]); - grouping.serialize(nos); + for (const auto & grouping : _groupingList) { + grouping->serialize(nos); } } @@ -105,25 +104,39 @@ GroupingContext::needRanking() const using DocId = uint32_t; +unsigned int +GroupingContext::aggregateRanked(Grouping &grouping, const RankedHit *rankedHit, unsigned int len) const { + unsigned int i(0); + for(; (i < len) && !hasExpired(); i++) { + grouping.aggregate(rankedHit[i].getDocId(), rankedHit[i].getRank()); + } + return i; +} + +void +GroupingContext::aggregate(Grouping & grouping, const BitVector * bVec, unsigned int lidLimit) const { + for (DocId d(bVec->getFirstTrueBit()); (d < lidLimit) && !hasExpired(); d = bVec->getNextTrueBit(d+1)) { + grouping.aggregate(d, 0.0); + } +} +void +GroupingContext::aggregate(Grouping & grouping, const BitVector * bVec, unsigned int lidLimit, unsigned int topN) const { + for(DocId d(bVec->getFirstTrueBit()), i(0); (d < lidLimit) && (i < topN) && !hasExpired(); d = bVec->getNextTrueBit(d+1), i++) { + grouping.aggregate(d, 0.0); + } +} + void GroupingContext::aggregate(Grouping & grouping, const RankedHit * rankedHit, unsigned int len, const BitVector * bVec) const { grouping.preAggregate(false); - - for(unsigned int i(0), m(grouping.getMaxN(len)); (i < m) && !hasExpired(); i++) { - grouping.aggregate(rankedHit[i].getDocId(), rankedHit[i].getRank()); - } + uint32_t count = aggregateRanked(grouping, rankedHit, grouping.getMaxN(len)); if (bVec != nullptr) { - unsigned int sz(bVec->size()); int64_t topN = grouping.getTopN(); - if (topN > 0) { - for(DocId d(bVec->getFirstTrueBit()), i(0), m(grouping.getMaxN(sz)); (d < sz) && (i < m) && !hasExpired(); d = bVec->getNextTrueBit(d+1), i++) { - grouping.aggregate(d, 0.0); - } + if (topN > count) { + aggregate(grouping, bVec, bVec->size(), topN - count); } else { - for(DocId d(bVec->getFirstTrueBit()); (d < sz) && !hasExpired(); d = bVec->getNextTrueBit(d+1)) { - grouping.aggregate(d, 0.0); - } + aggregate(grouping, bVec, bVec->size()); } } grouping.postProcess(); @@ -136,9 +149,7 @@ GroupingContext::aggregate(Grouping & grouping, const RankedHit * rankedHit, uns grouping.preAggregate(isOrdered); search::aggregation::HitsAggregationResult::SetOrdered pred; grouping.select(pred, pred); - for(unsigned int i(0), m(grouping.getMaxN(len)); (i < m) && !hasExpired(); i++) { - grouping.aggregate(rankedHit[i].getDocId(), rankedHit[i].getRank()); - } + aggregateRanked(grouping, rankedHit, grouping.getMaxN(len)); grouping.postProcess(); } diff --git a/searchcore/src/vespa/searchcore/grouping/groupingcontext.h b/searchcore/src/vespa/searchcore/grouping/groupingcontext.h index cbbe78a1019..880ffe5f767 100644 --- a/searchcore/src/vespa/searchcore/grouping/groupingcontext.h +++ b/searchcore/src/vespa/searchcore/grouping/groupingcontext.h @@ -3,10 +3,8 @@ #include <vespa/searchlib/aggregation/grouping.h> #include <vespa/vespalib/objects/nbostream.h> -#include <vespa/vespalib/util/time.h> #include <vespa/vespalib/util/clock.h> #include <vector> -#include <memory> namespace search::grouping { @@ -20,8 +18,7 @@ class GroupingContext public: using UP = std::unique_ptr<GroupingContext>; using Grouping = search::aggregation::Grouping; - using GroupingPtr = std::shared_ptr<Grouping>; - using GroupingList = std::vector<GroupingPtr>; + using GroupingList = std::vector<std::shared_ptr<Grouping>>; /** * Deserialize a grouping spec into this context. @@ -57,7 +54,7 @@ public: * Add another grouping to this context. * @param g Pointer to the grouping object to become part of this context. **/ - void addGrouping(const GroupingPtr & g); + void addGrouping(std::shared_ptr<Grouping> g); /** * Reset the context to an empty state. @@ -111,9 +108,12 @@ public: bool needRanking() const; bool enableNestedMultivalueGrouping() const noexcept { return _enableNestedMultivalueGrouping; } - void aggregate(Grouping & grouping, const RankedHit * rankedHit, unsigned int len, const BitVector * bVec) const; + void aggregate(Grouping & grouping, const RankedHit * rankedHit, unsigned int len, const BitVector * bv) const; void aggregate(Grouping & grouping, const RankedHit * rankedHit, unsigned int len) const; private: + unsigned int aggregateRanked(Grouping & grouping, const RankedHit * rankedHit, unsigned int len) const; + void aggregate(Grouping & grouping, const BitVector * bv, unsigned int lidLimit) const; + void aggregate(Grouping & grouping, const BitVector * bv, unsigned int , unsigned int topN) const; const vespalib::Clock & _clock; vespalib::steady_time _timeOfDoom; vespalib::nbostream _os; diff --git a/searchcore/src/vespa/searchcore/grouping/groupingsession.cpp b/searchcore/src/vespa/searchcore/grouping/groupingsession.cpp index fe476039ab8..fa63b0c97c6 100644 --- a/searchcore/src/vespa/searchcore/grouping/groupingsession.cpp +++ b/searchcore/src/vespa/searchcore/grouping/groupingsession.cpp @@ -44,9 +44,9 @@ GroupingSession::init(GroupingContext & groupingContext, const IAttributeContext auto gp = std::make_shared<Grouping>(*g); gp->setLastLevel(gp->levels().size()); _groupingMap[gp->getId()] = gp; - g = gp; + g = std::move(gp); } - _mgrContext->addGrouping(g); + _mgrContext->addGrouping(std::move(g)); } _groupingManager->init(attrCtx); } @@ -64,9 +64,8 @@ GroupingSession::createThreadContext(size_t thread_id, const IAttributeContext & { auto ctx = std::make_unique<GroupingContext>(*_mgrContext); if (thread_id == 0) { - GroupingContext::GroupingList &groupingList = _mgrContext->getGroupingList(); - for (size_t i = 0; i < groupingList.size(); ++i) { - ctx->addGrouping(groupingList[i]); + for (const auto & grouping : _mgrContext->getGroupingList()) { + ctx->addGrouping(grouping); } } else { ctx->deserialize(_mgrContext->getResult().peek(), _mgrContext->getResult().size()); diff --git a/searchcore/src/vespa/searchcore/proton/matching/result_processor.h b/searchcore/src/vespa/searchcore/proton/matching/result_processor.h index 4a59609da5c..54b9adc4723 100644 --- a/searchcore/src/vespa/searchcore/proton/matching/result_processor.h +++ b/searchcore/src/vespa/searchcore/proton/matching/result_processor.h @@ -100,7 +100,6 @@ public: size_t offset, size_t hits); ~ResultProcessor(); - size_t countFS4Hits(); void prepareThreadContextCreation(size_t num_threads); Context::UP createThreadContext(const vespalib::Doom & hardDoom, size_t thread_id, uint32_t distributionKey); std::vector<std::pair<uint32_t,uint32_t>> extract_docid_ordering(const PartialResult &result) const; |