tatami
C++ API for different matrix representations
Loading...
Searching...
No Matches
ForcedDense.hpp
Go to the documentation of this file.
1#ifndef TATAMI_FORCED_DENSE_HPP
2#define TATAMI_FORCED_DENSE_HPP
3
4#include "../base/Matrix.hpp"
5
11namespace tatami {
12
32template<typename Value_, typename Index_>
33class ForcedDense final : public Matrix<Value_, Index_> {
34public:
38 ForcedDense(std::shared_ptr<const Matrix<Value_, Index_> > matrix) : my_matrix(std::move(matrix)) {}
39
40private:
41 std::shared_ptr<const Matrix<Value_, Index_> > my_matrix;
42
43public:
44 Index_ nrow() const { return my_matrix->nrow(); }
45
46 Index_ ncol() const { return my_matrix->ncol(); }
47
48 bool prefer_rows() const { return my_matrix->prefer_rows(); }
49
50 bool uses_oracle(const bool row) const { return my_matrix->uses_oracle(row); }
51
52 bool is_sparse() const { return false; }
53
54 double is_sparse_proportion() const { return 0; }
55
56 double prefer_rows_proportion() const { return my_matrix->prefer_rows_proportion(); }
57
58 using Matrix<Value_, Index_>::dense;
59
60 using Matrix<Value_, Index_>::sparse;
61
62 /*****************************
63 ******* Dense myopic ********
64 *****************************/
65public:
66 std::unique_ptr<MyopicDenseExtractor<Value_, Index_> > dense(const bool row, const Options& opt) const {
67 return my_matrix->dense(row, opt);
68 }
69
70 std::unique_ptr<MyopicDenseExtractor<Value_, Index_> > dense(const bool row, const Index_ block_start, const Index_ block_length, const Options& opt) const {
71 return my_matrix->dense(row, block_start, block_length, opt);
72 }
73
74 std::unique_ptr<MyopicDenseExtractor<Value_, Index_> > dense(const bool row, VectorPtr<Index_> indices_ptr, const Options& opt) const {
75 return my_matrix->dense(row, std::move(indices_ptr), opt);
76 }
77
78 /******************************
79 ******* Sparse myopic ********
80 ******************************/
81public:
82 std::unique_ptr<MyopicSparseExtractor<Value_, Index_> > sparse(const bool row, const Options& opt) const {
83 return my_matrix->sparse(row, opt);
84 }
85
86 std::unique_ptr<MyopicSparseExtractor<Value_, Index_> > sparse(const bool row, const Index_ block_start, const Index_ block_length, const Options& opt) const {
87 return my_matrix->sparse(row, block_start, block_length, opt);
88 }
89
90 std::unique_ptr<MyopicSparseExtractor<Value_, Index_> > sparse(const bool row, VectorPtr<Index_> indices_ptr, const Options& opt) const {
91 return my_matrix->sparse(row, indices_ptr, opt);
92 }
93
94 /*******************************
95 ******* Dense oracular ********
96 *******************************/
97public:
98 std::unique_ptr<OracularDenseExtractor<Value_, Index_> > dense(
99 const bool row,
100 std::shared_ptr<const Oracle<Index_> > oracle,
101 const Options& opt
102 ) const {
103 return my_matrix->dense(row, std::move(oracle), opt);
104 }
105
106 std::unique_ptr<OracularDenseExtractor<Value_, Index_> > dense(
107 const bool row,
108 std::shared_ptr<const Oracle<Index_> > oracle,
109 const Index_ block_start,
110 const Index_ block_length,
111 const Options& opt)
112 const {
113 return my_matrix->dense(row, std::move(oracle), block_start, block_length, opt);
114 }
115
116 std::unique_ptr<OracularDenseExtractor<Value_, Index_> > dense(
117 const bool row,
118 std::shared_ptr<const Oracle<Index_> > oracle,
119 VectorPtr<Index_> indices_ptr,
120 const Options& opt
121 ) const {
122 return my_matrix->dense(row, std::move(oracle), std::move(indices_ptr), opt);
123 }
124
125 /********************************
126 ******* Sparse oracular ********
127 ********************************/
128public:
129 std::unique_ptr<OracularSparseExtractor<Value_, Index_> > sparse(
130 const bool row,
131 std::shared_ptr<const Oracle<Index_> > oracle,
132 const Options& opt
133 ) const {
134 return my_matrix->sparse(row, std::move(oracle), opt);
135 }
136
137 std::unique_ptr<OracularSparseExtractor<Value_, Index_> > sparse(
138 const bool row,
139 std::shared_ptr<const Oracle<Index_> > oracle,
140 const Index_ block_start,
141 const Index_ block_length,
142 const Options& opt)
143 const {
144 return my_matrix->sparse(row, std::move(oracle), block_start, block_length, opt);
145 }
146
147 std::unique_ptr<OracularSparseExtractor<Value_, Index_> > sparse(
148 const bool row,
149 std::shared_ptr<const Oracle<Index_> > oracle,
150 VectorPtr<Index_> indices_ptr,
151 const Options& opt
152 ) const {
153 return my_matrix->sparse(row, std::move(oracle), std::move(indices_ptr), opt);
154 }
155};
156
157}
158
159#endif
Virtual class for a matrix of some numeric type.
Forced dense representation.
Definition ForcedDense.hpp:33
std::unique_ptr< OracularDenseExtractor< Value_, Index_ > > dense(const bool row, std::shared_ptr< const Oracle< Index_ > > oracle, const Options &opt) const
Definition ForcedDense.hpp:98
std::unique_ptr< MyopicDenseExtractor< Value_, Index_ > > dense(const bool row, const Index_ block_start, const Index_ block_length, const Options &opt) const
Definition ForcedDense.hpp:70
bool prefer_rows() const
Definition ForcedDense.hpp:48
double prefer_rows_proportion() const
Definition ForcedDense.hpp:56
std::unique_ptr< MyopicDenseExtractor< Value_, Index_ > > dense(const bool row, VectorPtr< Index_ > indices_ptr, const Options &opt) const
Definition ForcedDense.hpp:74
std::unique_ptr< OracularDenseExtractor< Value_, Index_ > > dense(const bool row, std::shared_ptr< const Oracle< Index_ > > oracle, VectorPtr< Index_ > indices_ptr, const Options &opt) const
Definition ForcedDense.hpp:116
double is_sparse_proportion() const
Definition ForcedDense.hpp:54
std::unique_ptr< MyopicSparseExtractor< Value_, Index_ > > sparse(const bool row, VectorPtr< Index_ > indices_ptr, const Options &opt) const
Definition ForcedDense.hpp:90
std::unique_ptr< OracularSparseExtractor< Value_, Index_ > > sparse(const bool row, std::shared_ptr< const Oracle< Index_ > > oracle, const Options &opt) const
Definition ForcedDense.hpp:129
std::unique_ptr< OracularSparseExtractor< Value_, Index_ > > sparse(const bool row, std::shared_ptr< const Oracle< Index_ > > oracle, const Index_ block_start, const Index_ block_length, const Options &opt) const
Definition ForcedDense.hpp:137
std::unique_ptr< OracularSparseExtractor< Value_, Index_ > > sparse(const bool row, std::shared_ptr< const Oracle< Index_ > > oracle, VectorPtr< Index_ > indices_ptr, const Options &opt) const
Definition ForcedDense.hpp:147
std::unique_ptr< MyopicSparseExtractor< Value_, Index_ > > sparse(const bool row, const Index_ block_start, const Index_ block_length, const Options &opt) const
Definition ForcedDense.hpp:86
Index_ nrow() const
Definition ForcedDense.hpp:44
std::unique_ptr< MyopicSparseExtractor< Value_, Index_ > > sparse(const bool row, const Options &opt) const
Definition ForcedDense.hpp:82
std::unique_ptr< MyopicDenseExtractor< Value_, Index_ > > dense(const bool row, const Options &opt) const
Definition ForcedDense.hpp:66
ForcedDense(std::shared_ptr< const Matrix< Value_, Index_ > > matrix)
Definition ForcedDense.hpp:38
Index_ ncol() const
Definition ForcedDense.hpp:46
bool uses_oracle(const bool row) const
Definition ForcedDense.hpp:50
std::unique_ptr< OracularDenseExtractor< Value_, Index_ > > dense(const bool row, std::shared_ptr< const Oracle< Index_ > > oracle, const Index_ block_start, const Index_ block_length, const Options &opt) const
Definition ForcedDense.hpp:106
bool is_sparse() const
Definition ForcedDense.hpp:52
Virtual class for a matrix.
Definition Matrix.hpp:59
Predict future access requests on the target dimension.
Definition Oracle.hpp:29
Flexible representations for matrix data.
Definition Extractor.hpp:15
std::shared_ptr< const std::vector< Index_ > > VectorPtr
Definition Matrix.hpp:26
Options for accessing data from a Matrix instance.
Definition Options.hpp:30