diff options
author | Geir Storli <geirst@yahooinc.com> | 2022-03-30 14:54:20 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-30 14:54:20 +0200 |
commit | 58200e0e03baf5fc712fd28313622bc8b4515dca (patch) | |
tree | 02860f68ecf2f6770e4844bbc343fc4fa04689e2 /searchlib/src | |
parent | 93859fca3e5ed153d0503fe0c4354e6a9cabac29 (diff) | |
parent | b848f308c12f71ef90d829727ddcb838415dda97 (diff) |
Merge pull request #21895 from vespa-engine/geirst/implement-multivalueattribute-interface
Implement IMultiValueAttribute interface in MultiValueAttribute.
Diffstat (limited to 'searchlib/src')
4 files changed, 31 insertions, 11 deletions
diff --git a/searchlib/src/tests/attribute/postinglistattribute/postinglistattribute_test.cpp b/searchlib/src/tests/attribute/postinglistattribute/postinglistattribute_test.cpp index ad49212fffc..6abcb99c3b3 100644 --- a/searchlib/src/tests/attribute/postinglistattribute/postinglistattribute_test.cpp +++ b/searchlib/src/tests/attribute/postinglistattribute/postinglistattribute_test.cpp @@ -90,11 +90,11 @@ private: Int32PostingListAttribute; typedef MultiValueNumericPostingAttribute< EnumAttribute<IntegerAttributeTemplate<int32_t> >, - multivalue::Value<IEnumStore::Index> > + multivalue::Value<IEnumStore::AtomicIndex> > Int32ArrayPostingListAttribute; typedef MultiValueNumericPostingAttribute< EnumAttribute<IntegerAttributeTemplate<int32_t> >, - multivalue::WeightedValue<IEnumStore::Index> > + multivalue::WeightedValue<IEnumStore::AtomicIndex> > Int32WsetPostingListAttribute; typedef SingleValueNumericPostingAttribute< @@ -102,11 +102,11 @@ private: FloatPostingListAttribute; typedef MultiValueNumericPostingAttribute< EnumAttribute<FloatingPointAttributeTemplate<float> >, - multivalue::Value<IEnumStore::Index> > + multivalue::Value<IEnumStore::AtomicIndex> > FloatArrayPostingListAttribute; typedef MultiValueNumericPostingAttribute< EnumAttribute<FloatingPointAttributeTemplate<float> >, - multivalue::WeightedValue<IEnumStore::Index> > + multivalue::WeightedValue<IEnumStore::AtomicIndex> > FloatWsetPostingListAttribute; typedef SingleValueStringPostingAttribute StringPostingListAttribute; diff --git a/searchlib/src/vespa/searchlib/attribute/enum_store_types.h b/searchlib/src/vespa/searchlib/attribute/enum_store_types.h index 435e94fe592..d97b83aac05 100644 --- a/searchlib/src/vespa/searchlib/attribute/enum_store_types.h +++ b/searchlib/src/vespa/searchlib/attribute/enum_store_types.h @@ -2,16 +2,17 @@ #pragma once -#include <vespa/vespalib/datastore/entryref.h> +#include <vespa/vespalib/datastore/atomic_entry_ref.h> #include <vespa/vespalib/stllike/allocator.h> #include <vector> namespace search::enumstore { -using Index = vespalib::datastore::EntryRef; -using InternalIndex = vespalib::datastore::EntryRefT<22>; -using IndexVector = std::vector<Index, vespalib::allocator_large<Index>>; +using AtomicIndex = vespalib::datastore::AtomicEntryRef; using EnumHandle = uint32_t; using EnumVector = std::vector<uint32_t, vespalib::allocator_large<uint32_t>>; +using Index = vespalib::datastore::EntryRef; +using IndexVector = std::vector<Index, vespalib::allocator_large<Index>>; +using InternalIndex = vespalib::datastore::EntryRefT<22>; } diff --git a/searchlib/src/vespa/searchlib/attribute/i_enum_store.h b/searchlib/src/vespa/searchlib/attribute/i_enum_store.h index d8b09ba211f..57886511221 100644 --- a/searchlib/src/vespa/searchlib/attribute/i_enum_store.h +++ b/searchlib/src/vespa/searchlib/attribute/i_enum_store.h @@ -34,6 +34,7 @@ class IEnumStoreDictionary; */ class IEnumStore { public: + using AtomicIndex = enumstore::AtomicIndex; using Index = enumstore::Index; using InternalIndex = enumstore::InternalIndex; using IndexVector = enumstore::IndexVector; diff --git a/searchlib/src/vespa/searchlib/attribute/multivalueattribute.h b/searchlib/src/vespa/searchlib/attribute/multivalueattribute.h index 01cef03e687..848d5547672 100644 --- a/searchlib/src/vespa/searchlib/attribute/multivalueattribute.h +++ b/searchlib/src/vespa/searchlib/attribute/multivalueattribute.h @@ -2,9 +2,11 @@ #pragma once -#include "multi_value_mapping.h" -#include "attributevector.h" #include "atomic_utils.h" +#include "attributevector.h" +#include "multi_value_mapping.h" +#include <vespa/searchcommon/attribute/i_multi_value_attribute.h> +#include <vespa/searchcommon/attribute/i_multi_value_read_view.h> namespace search { @@ -15,7 +17,9 @@ namespace search { * M: MultiValueType */ template <typename B, typename M> -class MultiValueAttribute : public B +class MultiValueAttribute : public B, + public attribute::IMultiValueAttribute, + public attribute::IMultiValueReadView<M> { protected: typedef typename B::DocId DocId; @@ -74,6 +78,20 @@ public: void clearDocs(DocId lidLow, DocId lidLimit, bool in_shrink_lid_space) override; void onShrinkLidSpace() override ; void onAddDocs(DocId lidLimit) override; + + const IMultiValueAttribute* as_multi_value_attribute() const override { + return this; + } + + // Implements attribute::IMultiValueAttribute + const attribute::IMultiValueReadView<MultiValueType>* as_read_view(attribute::IMultiValueAttribute::Tag<MultiValueType>) const override { + return this; + } + + // Implements attribute::IMultiValueReadView + vespalib::ConstArrayRef<MultiValueType> get_raw_values(uint32_t docid) const override { + return this->_mvMapping.get(docid); + } }; } // namespace search |