4#include "dense_row.hpp"
5#include "sparse_row.hpp"
6#include "dense_column.hpp"
7#include "sparse_column.hpp"
12#include "sanisizer/sanisizer.hpp"
66template<
typename Value_,
typename Index_,
typename Right_,
typename Output_>
70 sparse_row_vector(left, right, output, opt.
num_threads);
72 sparse_column_vector(left, right, output, opt.
num_threads);
76 dense_row_vector(left, right, output, opt.
num_threads);
78 dense_column_vector(left, right, output, opt.
num_threads);
98template<
typename Left_,
typename Value_,
typename Index_,
typename Output_>
101 if (tright->sparse()) {
102 if (tright->prefer_rows()) {
103 sparse_row_vector(*tright, left, output, opt.
num_threads);
105 sparse_column_vector(*tright, left, output, opt.
num_threads);
108 if (tright->prefer_rows()) {
109 dense_row_vector(*tright, left, output, opt.
num_threads);
111 dense_column_vector(*tright, left, output, opt.
num_threads);
131template<
typename Value_,
typename Index_,
typename Right_,
typename Output_>
135 sparse_row_vectors(left, right, output, opt.
num_threads);
137 sparse_column_vectors(left, right, output, opt.
num_threads);
141 dense_row_vectors(left, right, output, opt.
num_threads);
143 dense_column_vectors(left, right, output, opt.
num_threads);
163template<
typename Left_,
typename Value_,
typename Index_,
typename Output_>
166 if (tright->sparse()) {
167 if (tright->prefer_rows()) {
168 sparse_row_vectors(*tright, left, output, opt.
num_threads);
170 sparse_column_vectors(*tright, left, output, opt.
num_threads);
173 if (tright->prefer_rows()) {
174 dense_row_vectors(*tright, left, output, opt.
num_threads);
176 dense_column_vectors(*tright, left, output, opt.
num_threads);
184template<
typename LeftValue_,
typename LeftIndex_,
typename RightValue_,
typename RightIndex_,
typename Output_>
189 sparse_row_tatami_sparse(left, right, column_major_out, output, num_threads);
191 sparse_row_tatami_dense(left, right, column_major_out, output, num_threads);
195 sparse_column_tatami_sparse(left, right, column_major_out, output, num_threads);
197 sparse_column_tatami_dense(left, right, column_major_out, output, num_threads);
203 dense_row_tatami_sparse(left, right, column_major_out, output, num_threads);
205 dense_row_tatami_dense(left, right, column_major_out, output, num_threads);
209 dense_column_tatami_sparse(left, right, column_major_out, output, num_threads);
211 dense_column_tatami_dense(left, right, column_major_out, output, num_threads);
236template<
typename LeftValue_,
typename LeftIndex_,
typename RightValue_,
typename RightIndex_,
typename Output_>
239 if (sanisizer::is_less_than(left.
nrow(), right.
ncol())) {
virtual Index_ ncol() const=0
virtual Index_ nrow() const=0
virtual bool prefer_rows() const=0
virtual std::unique_ptr< MyopicSparseExtractor< Value_, Index_ > > sparse(bool row, const Options &opt) const=0
Multiplication of tatami matrices.
void multiply(const tatami::Matrix< Value_, Index_ > &left, const Right_ *right, Output_ *output, const Options &opt)
Definition tatami_mult.hpp:67
std::shared_ptr< const Matrix< Value_, Index_ > > wrap_shared_ptr(const Matrix< Value_, Index_ > *const ptr)
Options for multiply().
Definition tatami_mult.hpp:28
bool prefer_larger
Definition tatami_mult.hpp:41
int num_threads
Definition tatami_mult.hpp:32
bool column_major_output
Definition tatami_mult.hpp:48