aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@yahooinc.com>2022-03-16 11:26:21 +0100
committerTor Egge <Tor.Egge@yahooinc.com>2022-03-16 11:26:21 +0100
commit49c6d07805bece75546026dc85bb192f29de4036 (patch)
tree66a24a351c99ea338cee462c9aaf3e26b6fb04eb /searchlib
parent7ecbb650f2754adadd5f9b71ea7f43aa8df0425a (diff)
Add acquire_enum_entry_ref() member function to single enum attribute.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/attribute/singleenumattribute.h9
-rw-r--r--searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.h2
-rw-r--r--searchlib/src/vespa/searchlib/attribute/singlestringattribute.h4
3 files changed, 10 insertions, 5 deletions
diff --git a/searchlib/src/vespa/searchlib/attribute/singleenumattribute.h b/searchlib/src/vespa/searchlib/attribute/singleenumattribute.h
index 4ce55902d7f..1edcec4b9dd 100644
--- a/searchlib/src/vespa/searchlib/attribute/singleenumattribute.h
+++ b/searchlib/src/vespa/searchlib/attribute/singleenumattribute.h
@@ -20,6 +20,7 @@ protected:
using AtomicEntryRef = vespalib::datastore::AtomicEntryRef;
using AtomicEntryRefVector = vespalib::RcuVectorBase<AtomicEntryRef>;
using DocId = AttributeVector::DocId;
+ using EntryRef = vespalib::datastore::EntryRef;
using EnumHandle = AttributeVector::EnumHandle;
using EnumIndex = IEnumStore::Index;
using EnumIndexRemapper = IEnumStore::EnumIndexRemapper;
@@ -28,8 +29,12 @@ protected:
public:
using EnumIndexCopyVector = vespalib::Array<EnumIndex>;
- IEnumStore::Index getEnumIndex(DocId docId) const { return _enumIndices[docId].load_acquire(); }
- EnumHandle getE(DocId doc) const { return _enumIndices[doc].load_acquire().ref(); }
+protected:
+ EntryRef acquire_enum_entry_ref(DocId docId) const noexcept { return _enumIndices.acquire_elem_ref(docId).load_acquire(); }
+
+public:
+ IEnumStore::Index getEnumIndex(DocId docId) const noexcept { return acquire_enum_entry_ref(docId); }
+ EnumHandle getE(DocId doc) const noexcept { return acquire_enum_entry_ref(doc).ref(); }
protected:
SingleValueEnumAttributeBase(const attribute::Config & c, GenerationHolder &genHolder, const vespalib::alloc::Alloc& initial_alloc);
~SingleValueEnumAttributeBase();
diff --git a/searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.h b/searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.h
index 9ef2d680f05..0198668f4f2 100644
--- a/searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.h
+++ b/searchlib/src/vespa/searchlib/attribute/singlenumericenumattribute.h
@@ -103,7 +103,7 @@ public:
// Attribute read API
//-------------------------------------------------------------------------
T get(DocId doc) const override {
- return this->_enumStore.get_value(this->_enumIndices[doc].load_acquire());
+ return this->_enumStore.get_value(this->acquire_enum_entry_ref(doc));
}
largeint_t getInt(DocId doc) const override {
return static_cast<largeint_t>(get(doc));
diff --git a/searchlib/src/vespa/searchlib/attribute/singlestringattribute.h b/searchlib/src/vespa/searchlib/attribute/singlestringattribute.h
index 45bb007e737..8c4bffe237e 100644
--- a/searchlib/src/vespa/searchlib/attribute/singlestringattribute.h
+++ b/searchlib/src/vespa/searchlib/attribute/singlestringattribute.h
@@ -45,7 +45,7 @@ public:
//-------------------------------------------------------------------------
bool isUndefined(DocId doc) const override { return get(doc)[0] == '\0'; }
const char * get(DocId doc) const override {
- return this->_enumStore.get_value(this->_enumIndices[doc].load_acquire());
+ return this->_enumStore.get_value(this->acquire_enum_entry_ref(doc));
}
std::vector<EnumHandle> findFoldedEnums(const char *value) const override {
return this->_enumStore.find_folded_enums(value);
@@ -95,7 +95,7 @@ public:
int32_t onFind(DocId doc, int32_t elemId) const override {
if ( elemId != 0) return -1;
const SingleValueStringAttributeT<B> & attr(static_cast<const SingleValueStringAttributeT<B> &>(attribute()));
- return isMatch(attr._enumStore.get_value(attr._enumIndices[doc].load_acquire())) ? 0 : -1;
+ return isMatch(attr._enumStore.get_value(attr.acquire_enum_entry_ref(doc))) ? 0 : -1;
}
};