diff options
5 files changed, 9 insertions, 13 deletions
diff --git a/searchlib/src/vespa/searchlib/attribute/enum_store_dictionary.cpp b/searchlib/src/vespa/searchlib/attribute/enum_store_dictionary.cpp index 0cd30c2b5cb..d45d6fa8c7c 100644 --- a/searchlib/src/vespa/searchlib/attribute/enum_store_dictionary.cpp +++ b/searchlib/src/vespa/searchlib/attribute/enum_store_dictionary.cpp @@ -50,14 +50,14 @@ EnumStoreDictionary<DictionaryT>::writeAllValues(BufferWriter& writer, typename DictionaryT::Iterator it(rootRef, this->_dict.getAllocator()); while (it.valid()) { if (idxs.size() >= idxs.capacity()) { - _enumStore.writeValues(writer, &idxs[0], idxs.size()); + _enumStore.writeValues(writer, vespalib::ConstArrayRef(&idxs[0], idxs.size())); idxs.clear(); } idxs.push_back(it.getKey()); ++it; } if (!idxs.empty()) { - _enumStore.writeValues(writer, &idxs[0], idxs.size()); + _enumStore.writeValues(writer, vespalib::ConstArrayRef(&idxs[0], idxs.size())); } } diff --git a/searchlib/src/vespa/searchlib/attribute/enumstore.cpp b/searchlib/src/vespa/searchlib/attribute/enumstore.cpp index 98631d91ca2..0ef0b9d416b 100644 --- a/searchlib/src/vespa/searchlib/attribute/enumstore.cpp +++ b/searchlib/src/vespa/searchlib/attribute/enumstore.cpp @@ -12,11 +12,9 @@ namespace search { template <> void EnumStoreT<StringEntryType>::writeValues(BufferWriter& writer, - const Index* idxs, - size_t count) const + const vespalib::ConstArrayRef<Index>& idxs) const { - for (size_t i = 0; i < count; ++i) { - Index idx = idxs[i]; + for (const auto& idx : idxs) { const char* src = _store.get(idx); size_t sz = strlen(src) + 1; writer.write(src, sz); diff --git a/searchlib/src/vespa/searchlib/attribute/enumstore.h b/searchlib/src/vespa/searchlib/attribute/enumstore.h index 82b9d4cacac..4404e67b834 100644 --- a/searchlib/src/vespa/searchlib/attribute/enumstore.h +++ b/searchlib/src/vespa/searchlib/attribute/enumstore.h @@ -232,7 +232,7 @@ public: } // TODO: Change to sending enum indexes as const array ref. - void writeValues(BufferWriter &writer, const Index *idxs, size_t count) const override; + void writeValues(BufferWriter& writer, const vespalib::ConstArrayRef<Index>& idxs) const override; bool foldedChange(const Index &idx1, const Index &idx2) const override; bool findEnum(DataType value, IEnumStore::EnumHandle &e) const; std::vector<IEnumStore::EnumHandle> findFoldedEnums(DataType value) const; @@ -256,8 +256,7 @@ class datastore::DataStoreT<IEnumStore::Index>; template <> void EnumStoreT<StringEntryType>::writeValues(BufferWriter& writer, - const IEnumStore::Index* idxs, - size_t count) const; + const vespalib::ConstArrayRef<IEnumStore::Index>& idxs) const; template <> ssize_t diff --git a/searchlib/src/vespa/searchlib/attribute/enumstore.hpp b/searchlib/src/vespa/searchlib/attribute/enumstore.hpp index 3b63618e7de..ff0f88ff817 100644 --- a/searchlib/src/vespa/searchlib/attribute/enumstore.hpp +++ b/searchlib/src/vespa/searchlib/attribute/enumstore.hpp @@ -131,10 +131,9 @@ EnumStoreT<EntryType>::NonEnumeratedLoader::~NonEnumeratedLoader() = default; template <class EntryType> void -EnumStoreT<EntryType>::writeValues(BufferWriter& writer, const Index* idxs, size_t count) const +EnumStoreT<EntryType>::writeValues(BufferWriter& writer, const vespalib::ConstArrayRef<Index>& idxs) const { - for (size_t i = 0; i < count; ++i) { - Index idx = idxs[i]; + for (const auto& idx : idxs) { writer.write(&_store.get(idx), sizeof(DataType)); } } diff --git a/searchlib/src/vespa/searchlib/attribute/i_enum_store.h b/searchlib/src/vespa/searchlib/attribute/i_enum_store.h index a01a0393d4d..3e9e1d2a543 100644 --- a/searchlib/src/vespa/searchlib/attribute/i_enum_store.h +++ b/searchlib/src/vespa/searchlib/attribute/i_enum_store.h @@ -50,7 +50,7 @@ public: virtual ~IEnumStore() = default; - virtual void writeValues(BufferWriter& writer, const Index* idxs, size_t count) const = 0; + virtual void writeValues(BufferWriter& writer, const vespalib::ConstArrayRef<Index>& idxs) const = 0; virtual ssize_t load_unique_values(const void* src, size_t available, IndexVector& idx) = 0; virtual void fixupRefCount(Index idx, uint32_t refCount) = 0; virtual void fixupRefCounts(const EnumVector& histogram) = 0; |