diff options
author | Geir Storli <geirst@verizonmedia.com> | 2019-02-01 14:23:10 +0000 |
---|---|---|
committer | Geir Storli <geirst@verizonmedia.com> | 2019-02-01 14:23:10 +0000 |
commit | 12cf8c1a86fe0d796de358d63691ce211edf25ce (patch) | |
tree | b4bcf83e8cadae050d49002e6b0fb80f2fee29f9 /searchcore | |
parent | 9df35eda38ec64c3e3ee5935eee65899d1e15840 (diff) |
Apply TensorModifyUpdate to the associated tensor attribute in searchcore.
Diffstat (limited to 'searchcore')
-rw-r--r-- | searchcore/src/vespa/searchcore/proton/common/attribute_updater.cpp | 40 |
1 files changed, 29 insertions, 11 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/common/attribute_updater.cpp b/searchcore/src/vespa/searchcore/proton/common/attribute_updater.cpp index 6d17b22ca19..060f991d9ac 100644 --- a/searchcore/src/vespa/searchcore/proton/common/attribute_updater.cpp +++ b/searchcore/src/vespa/searchcore/proton/common/attribute_updater.cpp @@ -1,25 +1,27 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "attribute_updater.h" +#include <vespa/eval/tensor/tensor.h> +#include <vespa/document/base/forcelink.h> #include <vespa/document/fieldvalue/arrayfieldvalue.h> -#include <vespa/document/fieldvalue/predicatefieldvalue.h> -#include <vespa/document/fieldvalue/weightedsetfieldvalue.h> #include <vespa/document/fieldvalue/literalfieldvalue.h> -#include <vespa/document/fieldvalue/tensorfieldvalue.h> +#include <vespa/document/fieldvalue/predicatefieldvalue.h> #include <vespa/document/fieldvalue/referencefieldvalue.h> -#include <vespa/document/update/assignvalueupdate.h> +#include <vespa/document/fieldvalue/tensorfieldvalue.h> +#include <vespa/document/fieldvalue/weightedsetfieldvalue.h> #include <vespa/document/update/addvalueupdate.h> -#include <vespa/document/update/removevalueupdate.h> -#include <vespa/document/update/mapvalueupdate.h> #include <vespa/document/update/arithmeticvalueupdate.h> +#include <vespa/document/update/assignvalueupdate.h> #include <vespa/document/update/clearvalueupdate.h> -#include <vespa/document/base/forcelink.h> -#include <vespa/searchlib/common/base.h> -#include <vespa/searchlib/tensor/tensor_attribute.h> -#include <vespa/searchlib/attribute/reference_attribute.h> -#include <vespa/searchlib/attribute/predicate_attribute.h> +#include <vespa/document/update/mapvalueupdate.h> +#include <vespa/document/update/removevalueupdate.h> +#include <vespa/document/update/tensormodifyupdate.h> #include <vespa/searchlib/attribute/attributevector.hpp> #include <vespa/searchlib/attribute/changevector.hpp> +#include <vespa/searchlib/attribute/predicate_attribute.h> +#include <vespa/searchlib/attribute/reference_attribute.h> +#include <vespa/searchlib/common/base.h> +#include <vespa/searchlib/tensor/tensor_attribute.h> #include <vespa/vespalib/util/stringfmt.h> #include <sstream> @@ -201,6 +203,20 @@ AttributeUpdater::handleUpdate(PredicateAttribute &vec, uint32_t lid, const Valu } } +namespace { + +void +applyTensorModifyUpdate(TensorAttribute &vec, uint32_t lid, const TensorModifyUpdate &update) +{ + auto oldTensor = vec.getTensor(lid); + auto newTensor = update.applyTo(*oldTensor); + if (newTensor) { + vec.setTensor(lid, *newTensor); + } +} + +} + template <> void AttributeUpdater::handleUpdate(TensorAttribute &vec, uint32_t lid, const ValueUpdate &upd) @@ -214,6 +230,8 @@ AttributeUpdater::handleUpdate(TensorAttribute &vec, uint32_t lid, const ValueUp vec.clearDoc(lid); updateValue(vec, lid, assign.getValue()); } + } else if (op == ValueUpdate::TensorModifyUpdate) { + applyTensorModifyUpdate(vec, lid, static_cast<const TensorModifyUpdate &>(upd)); } else if (op == ValueUpdate::Clear) { vec.clearDoc(lid); } else { |