1#ifndef IRLBA_MATRIX_SIMPLE_HPP
2#define IRLBA_MATRIX_SIMPLE_HPP
22template<
class EigenVector_,
class Simple_>
23class SimpleWorkspace final :
public Workspace<EigenVector_> {
25 SimpleWorkspace(
const Simple_& matrix) : my_matrix(matrix) {}
28 const Simple_& my_matrix;
31 void multiply(
const EigenVector_& right, EigenVector_& output) {
32 output.noalias() = my_matrix * right;
36template<
class EigenVector_,
class Simple_>
37class SimpleAdjointWorkspace final :
public AdjointWorkspace<EigenVector_> {
39 SimpleAdjointWorkspace(
const Simple_& matrix) : my_matrix(matrix) {}
42 const Simple_& my_matrix;
45 void multiply(
const EigenVector_& right, EigenVector_& output) {
46 output.noalias() = my_matrix.adjoint() * right;
50template<
class EigenMatrix_,
class Simple_>
51class SimpleRealizeWorkspace final :
public RealizeWorkspace<EigenMatrix_> {
53 SimpleRealizeWorkspace(
const Simple_& matrix) : my_matrix(matrix) {}
56 const Simple_& my_matrix;
57 static constexpr bool is_same = std::is_same<EigenMatrix_, I<Simple_> >::value;
58 typename std::conditional<is_same, bool, EigenMatrix_>::type buffer;
61 const EigenMatrix_& realize(EigenMatrix_& buffer) {
62 if constexpr(is_same) {
88template<
class EigenVector_,
class EigenMatrix_,
class SimplePo
inter_>
94 SimpleMatrix(SimplePointer_ matrix) : my_matrix(std::move(matrix)) {}
97 SimplePointer_ my_matrix;
101 return my_matrix->rows();
105 return my_matrix->cols();
126 return std::make_unique<SimpleWorkspace<EigenVector_, I<
decltype(*my_matrix)> > >(*my_matrix);
133 return std::make_unique<SimpleAdjointWorkspace<EigenVector_, I<
decltype(*my_matrix)> > >(*my_matrix);
140 return std::make_unique<SimpleRealizeWorkspace<EigenMatrix_, I<
decltype(*my_matrix)> > >(*my_matrix);
Interface for a matrix to use in compute().
Definition interface.hpp:142
A Matrix-compatible wrapper around a "simple" matrix.
Definition simple.hpp:89
auto new_known_adjoint_workspace() const
Definition simple.hpp:132
SimpleMatrix(SimplePointer_ matrix)
Definition simple.hpp:94
std::unique_ptr< AdjointWorkspace< EigenVector_ > > new_adjoint_workspace() const
Definition simple.hpp:113
std::unique_ptr< Workspace< EigenVector_ > > new_workspace() const
Definition simple.hpp:109
Eigen::Index rows() const
Definition simple.hpp:100
auto new_known_realize_workspace() const
Definition simple.hpp:139
Eigen::Index cols() const
Definition simple.hpp:104
std::unique_ptr< RealizeWorkspace< EigenMatrix_ > > new_realize_workspace() const
Definition simple.hpp:117
auto new_known_workspace() const
Definition simple.hpp:125
Interfaces for matrix inputs.