aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib/src/vespa/searchlib/attribute/imported_attribute_vector.cpp
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@yahoo-inc.com>2017-02-27 15:53:44 +0000
committerTor Brede Vekterli <vekterli@yahoo-inc.com>2017-02-27 15:53:44 +0000
commit18fcf694dde62a9a2b717945feabab34ce371a2e (patch)
tree3af7bbf0ec38923d0a2dcc393ac70b9d1a61be9c /searchlib/src/vespa/searchlib/attribute/imported_attribute_vector.cpp
parent69eab7d83a53d58cb8d762ad25174cf80fa3c873 (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.cpp43
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);
+}
+
}
}