diff options
author | Arne Juul <arnej@verizonmedia.com> | 2020-01-09 08:11:34 +0000 |
---|---|---|
committer | Arne Juul <arnej@verizonmedia.com> | 2020-01-09 12:29:02 +0000 |
commit | c9a04ba6a32e1c215b062dcde225d76083372604 (patch) | |
tree | 50bd3418e44914cea7aca559a92eab70ca58ba6a /eval | |
parent | 9a16e95693f9c2c15bbe8ace8e4f4b264fe508ef (diff) |
use vespalib::visit_ranges
Diffstat (limited to 'eval')
-rw-r--r-- | eval/src/vespa/eval/tensor/sparse/sparse_tensor_address_combiner.cpp | 29 |
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; |