summaryrefslogtreecommitdiffstats
path: root/eval
diff options
context:
space:
mode:
authorArne Juul <arnej@verizonmedia.com>2020-01-09 08:11:34 +0000
committerArne Juul <arnej@verizonmedia.com>2020-01-09 12:29:02 +0000
commitc9a04ba6a32e1c215b062dcde225d76083372604 (patch)
tree50bd3418e44914cea7aca559a92eab70ca58ba6a /eval
parent9a16e95693f9c2c15bbe8ace8e4f4b264fe508ef (diff)
use vespalib::visit_ranges
Diffstat (limited to 'eval')
-rw-r--r--eval/src/vespa/eval/tensor/sparse/sparse_tensor_address_combiner.cpp29
1 files changed, 11 insertions, 18 deletions
diff --git a/eval/src/vespa/eval/tensor/sparse/sparse_tensor_address_combiner.cpp b/eval/src/vespa/eval/tensor/sparse/sparse_tensor_address_combiner.cpp
index aafb87c9d67..95b004a9bd2 100644
--- a/eval/src/vespa/eval/tensor/sparse/sparse_tensor_address_combiner.cpp
+++ b/eval/src/vespa/eval/tensor/sparse/sparse_tensor_address_combiner.cpp
@@ -3,29 +3,22 @@
#include "sparse_tensor_address_combiner.h"
#include "sparse_tensor_address_decoder.h"
#include <vespa/eval/eval/value_type.h>
+#include <vespa/vespalib/util/overload.h>
+#include <vespa/vespalib/util/visit_ranges.h>
namespace vespalib::tensor::sparse {
TensorAddressCombiner::TensorAddressCombiner(const eval::ValueType &lhs, const eval::ValueType &rhs)
{
- auto rhsItr = rhs.dimensions().cbegin();
- auto rhsItrEnd = rhs.dimensions().cend();
- for (auto &lhsDim : lhs.dimensions()) {
- while (rhsItr != rhsItrEnd && rhsItr->name < lhsDim.name) {
- _ops.push_back(AddressOp::RHS);
- ++rhsItr;
- }
- if (rhsItr != rhsItrEnd && rhsItr->name == lhsDim.name) {
- _ops.push_back(AddressOp::BOTH);
- ++rhsItr;
- } else {
- _ops.push_back(AddressOp::LHS);
- }
- }
- while (rhsItr != rhsItrEnd) {
- _ops.push_back(AddressOp::RHS);
- ++rhsItr;
- }
+ auto visitor = overload{
+ [this](visit_ranges_first, const auto &) { _ops.push_back(AddressOp::LHS); },
+ [this](visit_ranges_second, const auto &) { _ops.push_back(AddressOp::RHS); },
+ [this](visit_ranges_both, const auto &, const auto &) { _ops.push_back(AddressOp::BOTH); }
+ };
+ visit_ranges(visitor,
+ lhs.dimensions().cbegin(), lhs.dimensions().cend(),
+ rhs.dimensions().cbegin(), rhs.dimensions().cend(),
+ [](const auto & li, const auto & ri) { return li.name < ri.name; });
}
TensorAddressCombiner::~TensorAddressCombiner() = default;