aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorGeir Storli <geirst@yahooinc.com>2022-03-30 14:54:20 +0200
committerGitHub <noreply@github.com>2022-03-30 14:54:20 +0200
commit58200e0e03baf5fc712fd28313622bc8b4515dca (patch)
tree02860f68ecf2f6770e4844bbc343fc4fa04689e2 /searchlib
parent93859fca3e5ed153d0503fe0c4354e6a9cabac29 (diff)
parentb848f308c12f71ef90d829727ddcb838415dda97 (diff)
Merge pull request #21895 from vespa-engine/geirst/implement-multivalueattribute-interface
Implement IMultiValueAttribute interface in MultiValueAttribute.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/tests/attribute/postinglistattribute/postinglistattribute_test.cpp8
-rw-r--r--searchlib/src/vespa/searchlib/attribute/enum_store_types.h9
-rw-r--r--searchlib/src/vespa/searchlib/attribute/i_enum_store.h1
-rw-r--r--searchlib/src/vespa/searchlib/attribute/multivalueattribute.h24
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