diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2017-01-23 11:06:02 +0100 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2017-01-23 11:06:02 +0100 |
commit | 15ec467d56ecd224efc8bf4048c8666582b5e71b (patch) | |
tree | 47b8d77070f0e1505dbdf18d8f3a7383f12898c4 /searchlib | |
parent | 70e5e8f22477641d32edc70655fea31252369e18 (diff) |
Use ensure_size and implement onAddDocs.
Diffstat (limited to 'searchlib')
8 files changed, 18 insertions, 8 deletions
diff --git a/searchlib/src/vespa/searchlib/attribute/multinumericattribute.hpp b/searchlib/src/vespa/searchlib/attribute/multinumericattribute.hpp index 2cbebea242a..1e865d95f2e 100644 --- a/searchlib/src/vespa/searchlib/attribute/multinumericattribute.hpp +++ b/searchlib/src/vespa/searchlib/attribute/multinumericattribute.hpp @@ -113,6 +113,7 @@ MultiValueNumericAttribute<B, M>::onLoadEnumerated(ReaderBase & attrReader) uint32_t numDocs = attrReader.getNumIdx() - 1; this->setNumDocs(numDocs); this->setCommittedDocIdLimit(numDocs); + this->_mvMapping.reserve(numDocs+1); LoadedBuffer::UP udatBuffer(this->loadUDAT()); assert((udatBuffer->size() % sizeof(T)) == 0); @@ -147,6 +148,7 @@ MultiValueNumericAttribute<B, M>::onLoad() std::vector<MultiValueType> values; B::setNumDocs(numDocs); B::setCommittedDocIdLimit(numDocs); + this->_mvMapping.reserve(numDocs+1); for (DocId doc = 0; doc < numDocs; ++doc) { const uint32_t valueCount(attrReader.getNextValueCount()); for (uint32_t i(0); i < valueCount; i++) { diff --git a/searchlib/src/vespa/searchlib/attribute/multinumericenumattribute.hpp b/searchlib/src/vespa/searchlib/attribute/multinumericenumattribute.hpp index cdcb83478d6..9255a23984d 100644 --- a/searchlib/src/vespa/searchlib/attribute/multinumericenumattribute.hpp +++ b/searchlib/src/vespa/searchlib/attribute/multinumericenumattribute.hpp @@ -64,6 +64,7 @@ MultiValueNumericEnumAttribute<B, M>::onLoadEnumerated(ReaderBase &attrReader) this->fillEnum0(udatBuffer->buffer(), udatBuffer->size(), eidxs); this->setNumDocs(numDocs); this->setCommittedDocIdLimit(numDocs); + this->_mvMapping.reserve(numDocs); LoadedEnumAttributeVector loaded; EnumVector enumHist; if (this->hasPostings()) { @@ -114,6 +115,7 @@ MultiValueNumericEnumAttribute<B, M>::onLoad() if (numDocs > 0) { this->onAddDoc(numDocs - 1); } + this->_mvMapping.reserve(numDocs); loadAllAtOnce(attrReader, numDocs, numValues); return true; diff --git a/searchlib/src/vespa/searchlib/attribute/singleenumattribute.h b/searchlib/src/vespa/searchlib/attribute/singleenumattribute.h index 2da9966e194..1b625b697ed 100644 --- a/searchlib/src/vespa/searchlib/attribute/singleenumattribute.h +++ b/searchlib/src/vespa/searchlib/attribute/singleenumattribute.h @@ -101,7 +101,7 @@ protected: * * Should return true if underlying structures were resized. **/ - virtual bool onAddDoc(DocId doc) { (void) doc; return false; } + virtual bool onAddDoc(DocId doc); public: SingleValueEnumAttribute(const vespalib::string & baseFileName, const AttributeVector::Config & cfg); diff --git a/searchlib/src/vespa/searchlib/attribute/singleenumattribute.hpp b/searchlib/src/vespa/searchlib/attribute/singleenumattribute.hpp index 10bbb080ef8..345c7227627 100644 --- a/searchlib/src/vespa/searchlib/attribute/singleenumattribute.hpp +++ b/searchlib/src/vespa/searchlib/attribute/singleenumattribute.hpp @@ -26,6 +26,15 @@ SingleValueEnumAttribute<B>::~SingleValueEnumAttribute() } template <typename B> +bool SingleValueEnumAttribute<B>::onAddDoc(DocId doc) { + if (doc < _enumIndices.capacity()) { + _enumIndices.reserve(doc+1); + return true; + } + return false; +} + +template <typename B> void SingleValueEnumAttribute<B>::onAddDocs(DocId limit) { _enumIndices.reserve(limit); diff --git a/searchlib/src/vespa/searchlib/attribute/singlenumericattribute.hpp b/searchlib/src/vespa/searchlib/attribute/singlenumericattribute.hpp index 34e76c6176b..713ab52186e 100644 --- a/searchlib/src/vespa/searchlib/attribute/singlenumericattribute.hpp +++ b/searchlib/src/vespa/searchlib/attribute/singlenumericattribute.hpp @@ -110,6 +110,7 @@ SingleValueNumericAttribute<B>::onLoadEnumerated(ReaderBase &attrReader) this->setNumDocs(numDocs); this->setCommittedDocIdLimit(numDocs); + _data.unsafe_reserve(numDocs); fileutil::LoadedBuffer::UP udatBuffer(this->loadUDAT()); assert((udatBuffer->size() % sizeof(T)) == 0); diff --git a/searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.hpp b/searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.hpp index e50eae415ea..72ca876676c 100644 --- a/searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.hpp +++ b/searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.hpp @@ -129,6 +129,7 @@ SingleValueNumericEnumAttribute<B>::onLoad() if (numDocs > 0) { this->onAddDoc(numDocs - 1); } + for (uint32_t docIdx = 0; docIdx < numDocs; ++docIdx) { loaded[docIdx]._docId = docIdx; loaded[docIdx]._idx = 0; diff --git a/searchlib/src/vespa/searchlib/common/rcuvector.hpp b/searchlib/src/vespa/searchlib/common/rcuvector.hpp index 42346981fa7..c68016dea81 100644 --- a/searchlib/src/vespa/searchlib/common/rcuvector.hpp +++ b/searchlib/src/vespa/searchlib/common/rcuvector.hpp @@ -32,9 +32,7 @@ RcuVectorBase<T>::unsafe_reserve(size_t n) { template <typename T> void RcuVectorBase<T>::ensure_size(size_t n, T fill) { - if (n > capacity()) { - expand(calcNewSize(n)); - } + reserve(n); while (size() < n) { _data.push_back(fill); } diff --git a/searchlib/src/vespa/searchlib/docstore/logdatastore.cpp b/searchlib/src/vespa/searchlib/docstore/logdatastore.cpp index a3eb5ee03f7..5fa582320ee 100644 --- a/searchlib/src/vespa/searchlib/docstore/logdatastore.cpp +++ b/searchlib/src/vespa/searchlib/docstore/logdatastore.cpp @@ -870,10 +870,7 @@ LogDataStore::setLid(const LockGuard & guard, uint32_t lid, const LidInfo & meta _fileChunks[prev.getFileId()]->remove(lid, prev.size()); } } else { - _lidInfo.reserve(lid+1); - while (lid >= _lidInfo.size()) { - _lidInfo.push_back(LidInfo()); - } + _lidInfo.ensure_size(lid+1); _lidInfo.setGeneration(_genHandler.getNextGeneration()); _genHandler.incGeneration(); _genHandler.updateFirstUsedGeneration(); |