summaryrefslogtreecommitdiffstats
path: root/eval
diff options
context:
space:
mode:
authorHåvard Pettersen <havardpe@oath.com>2021-01-22 13:32:15 +0000
committerHåvard Pettersen <havardpe@oath.com>2021-01-22 13:32:15 +0000
commit262670d3a655523a26f06458dd23581af83d1b83 (patch)
treef6ac3da8c5edc6e8f779d0239592f152ba404259 /eval
parent6c2c269516896dc97204ec07abb73211d3dc29c0 (diff)
simplify subspace loop
Diffstat (limited to 'eval')
-rw-r--r--eval/src/vespa/eval/instruction/mixed_simple_join_function.cpp17
1 files changed, 7 insertions, 10 deletions
diff --git a/eval/src/vespa/eval/instruction/mixed_simple_join_function.cpp b/eval/src/vespa/eval/instruction/mixed_simple_join_function.cpp
index b6be8347220..ed88da77f3e 100644
--- a/eval/src/vespa/eval/instruction/mixed_simple_join_function.cpp
+++ b/eval/src/vespa/eval/instruction/mixed_simple_join_function.cpp
@@ -68,30 +68,27 @@ void my_simple_join_op(State &state, uint64_t param) {
auto dst_cells = make_dst_cells<OCT, pri_mut>(pri_cells, state.stash);
const auto &index = state.peek(swap ? 0 : 1).index();
size_t subspace_size = params.subspace_size;
- const PCT *pri = pri_cells.begin();
- OCT *dst = dst_cells.begin();
- for (; pri < pri_cells.end(); pri += subspace_size, dst += subspace_size) {
+ size_t offset = 0;
+ while (offset < pri_cells.size()) {
if constexpr (overlap == Overlap::FULL) {
- apply_op2_vec_vec(dst, pri, sec_cells.begin(), subspace_size, my_op);
+ apply_op2_vec_vec(&dst_cells[offset], &pri_cells[offset], sec_cells.begin(), subspace_size, my_op);
+ offset += subspace_size;
} else if constexpr (overlap == Overlap::OUTER) {
- size_t offset = 0;
size_t factor = params.factor;
for (SCT cell: sec_cells) {
- apply_op2_vec_num(dst + offset, pri + offset, cell, factor, my_op);
+ apply_op2_vec_num(&dst_cells[offset], &pri_cells[offset], cell, factor, my_op);
offset += factor;
}
} else {
static_assert(overlap == Overlap::INNER);
- size_t offset = 0;
size_t factor = params.factor;
for (size_t i = 0; i < factor; ++i) {
- apply_op2_vec_vec(dst + offset, pri + offset, sec_cells.begin(), sec_cells.size(), my_op);
+ apply_op2_vec_vec(&dst_cells[offset], &pri_cells[offset], sec_cells.begin(), sec_cells.size(), my_op);
offset += sec_cells.size();
}
}
}
- assert(pri == pri_cells.end());
- assert(dst == dst_cells.end());
+ assert(offset == pri_cells.size());
state.pop_pop_push(state.stash.create<ValueView>(params.result_type, index, TypedCells(dst_cells)));
}