diff options
author | Tor Brede Vekterli <vekterli@yahoo-inc.com> | 2017-02-27 15:53:44 +0000 |
---|---|---|
committer | Tor Brede Vekterli <vekterli@yahoo-inc.com> | 2017-02-27 15:53:44 +0000 |
commit | 18fcf694dde62a9a2b717945feabab34ce371a2e (patch) | |
tree | 3af7bbf0ec38923d0a2dcc393ac70b9d1a61be9c /searchlib/src/vespa/searchlib/attribute/imported_attribute_vector.cpp | |
parent | 69eab7d83a53d58cb8d762ad25174cf80fa3c873 (diff) |
Add attribute guards for imported attribute vectors
Diffstat (limited to 'searchlib/src/vespa/searchlib/attribute/imported_attribute_vector.cpp')
-rw-r--r-- | searchlib/src/vespa/searchlib/attribute/imported_attribute_vector.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/searchlib/src/vespa/searchlib/attribute/imported_attribute_vector.cpp b/searchlib/src/vespa/searchlib/attribute/imported_attribute_vector.cpp index f5e4762b88c..93fe7125f57 100644 --- a/searchlib/src/vespa/searchlib/attribute/imported_attribute_vector.cpp +++ b/searchlib/src/vespa/searchlib/attribute/imported_attribute_vector.cpp @@ -1,6 +1,7 @@ // Copyright 2017 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "imported_attribute_vector.h" +#include "attributeguard.h" #include <vespa/vespalib/util/exceptions.h> namespace search { @@ -121,5 +122,47 @@ long ImportedAttributeVector::onSerializeForDescendingSort(DocId doc, return _target_attribute->serializeForDescendingSort(doc, serTo, available, bc); } +namespace { + +class ImportedAttributeGuard : public AttributeGuard { +public: + ImportedAttributeGuard(const AttributeVectorSP& target_attr, + const AttributeVectorSP& reference_attr) + : AttributeGuard(), + _target_attr_guard(target_attr), + _reference_attr_guard(reference_attr) + { + } + +private: + AttributeGuard _target_attr_guard; + AttributeGuard _reference_attr_guard; +}; + +class ImportedAttributeEnumGuard : public AttributeEnumGuard { +public: + ImportedAttributeEnumGuard(const AttributeVectorSP& target_attr, + const AttributeVectorSP& reference_attr) + : AttributeEnumGuard(AttributeVectorSP()), + _target_attr_enum_guard(target_attr), + _reference_attr_guard(reference_attr) + { + } + +private: + AttributeEnumGuard _target_attr_enum_guard; + AttributeGuard _reference_attr_guard; +}; + +} + +std::unique_ptr<AttributeGuard> ImportedAttributeVector::acquireGuard() const { + return std::make_unique<ImportedAttributeGuard>(_target_attribute, _reference_attribute); +} + +std::unique_ptr<AttributeEnumGuard> ImportedAttributeVector::acquireEnumGuard() const { + return std::make_unique<ImportedAttributeEnumGuard>(_target_attribute, _reference_attribute); +} + } } |