56 const RightColumns_ right_columns,
57 GetRightRow_ get_right_row,
58 Output_*
const output,
61 const auto left_NR = left.
nrow();
62 const auto common_dim = left.
ncol();
66 std::fill_n(output, sanisizer::product_unsafe<std::size_t>(left_NR, right_columns), 0);
74 std::optional<std::vector<Output_> > tmp_output;
79 for (LeftIndex_ lr = 0; lr < length; ++lr) {
80 const auto range = ext->fetch(vbuffer.data(), ibuffer.data());
81 const auto optr = output + sanisizer::product_unsafe<std::size_t>(start + lr, right_columns);
82 const auto tmp_optr = (do_parallel ? tmp_output->data() : optr);
84 for (LeftIndex_ x = 0; x < range.number; ++x) {
85 const auto rightrow = get_right_row(range.index[x]);
86 const auto mult = range.value[x];
87 for (RightColumns_ rc = 0; rc < right_columns; ++rc) {
88 tmp_optr[rc] += mult * rightrow[rc];
93 if (range.number == 0) {
96 std::fill_n(optr, right_columns, 0);
98 std::copy_n(tmp_output->data(), right_columns, optr);
99 std::fill_n(tmp_output->data(), right_columns, 0);
void multiply_sparse_row_with_dense_row_matrix_to_row_output(const tatami::Matrix< LeftValue_, LeftIndex_ > &left, const RightColumns_ right_columns, GetRightRow_ get_right_row, Output_ *const output, const MultiplySparseRowWithDenseRowMatrixToRowOutputOptions &options)
Definition row_to_row.hpp:54
auto consecutive_extractor(const Matrix< Value_, Index_ > &matrix, const bool row, const Index_ iter_start, const Index_ iter_length, Args_ &&... args)