11#ifndef TATAMI_TEST_REVERSED_INDICES_WRAPPER_HPP
22#define TATAMI_TEST_REVERSED_INDICES_WRAPPER_HPP
33
4- #include " tatami/base/Matrix.hpp"
5- #include " tatami/utils/copy.hpp"
6-
74#include < algorithm>
85#include < memory>
96
7+ #include " tatami/base/Matrix.hpp"
8+ #include " tatami/utils/copy.hpp"
9+
1010/* *
1111 * @file ReversedIndicesWrapper.hpp
1212 * @brief Reverse sparse indices during extraction.
@@ -17,14 +17,23 @@ namespace tatami_test {
1717/* *
1818 * @cond
1919 */
20- namespace internal {
21-
2220template <bool oracle_, typename Value_, typename Index_>
2321class ReversedIndicesExtractor final : public tatami::SparseExtractor<oracle_, Value_, Index_> {
2422public:
25- ReversedIndicesExtractor (std::unique_ptr<tatami::SparseExtractor<oracle_, Value_, Index_> > host, bool must_sort) :
23+ ReversedIndicesExtractor (std::unique_ptr<tatami::SparseExtractor<oracle_, Value_, Index_> > host, const bool must_sort) :
2624 my_host (std::move(host)), my_must_sort(must_sort) {}
2725
26+ /* *
27+ * @cond
28+ */
29+ #ifdef TATAMI_STRICT_SIGNATURES
30+ template <typename ... Args_>
31+ ReversedIndicesExtractor (Args_...) = delete;
32+ #endif
33+ /* *
34+ * @endcond
35+ */
36+
2837private:
2938 std::unique_ptr<tatami::SparseExtractor<oracle_, Value_, Index_> > my_host;
3039 bool my_must_sort;
@@ -47,8 +56,6 @@ class ReversedIndicesExtractor final : public tatami::SparseExtractor<oracle_, V
4756 return range;
4857 }
4958};
50-
51- }
5259/* *
5360 * @endcond
5461 */
@@ -73,6 +80,20 @@ class ReversedIndicesWrapper final : public tatami::Matrix<Value_, Index_> {
7380 */
7481 ReversedIndicesWrapper (std::shared_ptr<const tatami::Matrix<Value_, Index_> > matrix) : my_matrix(std::move(matrix)) {}
7582
83+ /* *
84+ * @cond
85+ */
86+ #ifdef TATAMI_STRICT_SIGNATURES
87+ ReversedIndicesWrapper (std::shared_ptr<tatami::Matrix<Value_, Index_> > matrix) : ReversedIndicesWrapper(std::move(matrix)) {}
88+
89+ template <typename ... Args_>
90+ ReversedIndicesWrapper (Args_...) = delete;
91+ #endif
92+ /* *
93+ * @endcond
94+ */
95+
96+
7697private:
7798 std::shared_ptr<const tatami::Matrix<Value_, Index_> > my_matrix;
7899
@@ -101,60 +122,114 @@ class ReversedIndicesWrapper final : public tatami::Matrix<Value_, Index_> {
101122 return my_matrix->prefer_rows_proportion ();
102123 }
103124
104- bool uses_oracle (bool row) const {
125+ bool uses_oracle (const bool row) const {
105126 return my_matrix->uses_oracle (row);
106127 }
107128
108129public:
109- std::unique_ptr<tatami::MyopicDenseExtractor<Value_, Index_> > dense (bool row, const tatami::Options& opt) const {
130+ std::unique_ptr<tatami::MyopicDenseExtractor<Value_, Index_> > dense (
131+ const bool row,
132+ const tatami::Options& opt
133+ ) const {
110134 return my_matrix->dense (row, opt);
111135 }
112136
113- std::unique_ptr<tatami::MyopicDenseExtractor<Value_, Index_> > dense (bool row, Index_ bs, Index_ bl, const tatami::Options& opt) const {
137+ std::unique_ptr<tatami::MyopicDenseExtractor<Value_, Index_> > dense (
138+ const bool row,
139+ const Index_ bs,
140+ const Index_ bl,
141+ const tatami::Options& opt
142+ ) const {
114143 return my_matrix->dense (row, bs, bl, opt);
115144 }
116145
117- std::unique_ptr<tatami::MyopicDenseExtractor<Value_, Index_> > dense (bool row, tatami::VectorPtr<Index_> idx, const tatami::Options& opt) const {
146+ std::unique_ptr<tatami::MyopicDenseExtractor<Value_, Index_> > dense (
147+ const bool row,
148+ tatami::VectorPtr<Index_> idx,
149+ const tatami::Options& opt
150+ ) const {
118151 return my_matrix->dense (row, std::move (idx), opt);
119152 }
120153
121154public:
122- std::unique_ptr<tatami::MyopicSparseExtractor<Value_, Index_> > sparse (bool row, const tatami::Options& opt) const {
123- return std::make_unique<internal::ReversedIndicesExtractor<false , Value_, Index_> >(my_matrix->sparse (row, opt), opt.sparse_ordered_index );
155+ std::unique_ptr<tatami::MyopicSparseExtractor<Value_, Index_> > sparse (
156+ const bool row,
157+ const tatami::Options& opt
158+ ) const {
159+ return std::make_unique<ReversedIndicesExtractor<false , Value_, Index_> >(my_matrix->sparse (row, opt), opt.sparse_ordered_index );
124160 }
125161
126- std::unique_ptr<tatami::MyopicSparseExtractor<Value_, Index_> > sparse (bool row, Index_ bs, Index_ bl, const tatami::Options& opt) const {
127- return std::make_unique<internal::ReversedIndicesExtractor<false , Value_, Index_> >(my_matrix->sparse (row, bs, bl, opt), opt.sparse_ordered_index );
162+ std::unique_ptr<tatami::MyopicSparseExtractor<Value_, Index_> > sparse (
163+ const bool row,
164+ const Index_ bs,
165+ const Index_ bl,
166+ const tatami::Options& opt
167+ ) const {
168+ return std::make_unique<ReversedIndicesExtractor<false , Value_, Index_> >(my_matrix->sparse (row, bs, bl, opt), opt.sparse_ordered_index );
128169 }
129170
130- std::unique_ptr<tatami::MyopicSparseExtractor<Value_, Index_> > sparse (bool row, tatami::VectorPtr<Index_> idx, const tatami::Options& opt) const {
131- return std::make_unique<internal::ReversedIndicesExtractor<false , Value_, Index_> >(my_matrix->sparse (row, std::move (idx), opt), opt.sparse_ordered_index );
171+ std::unique_ptr<tatami::MyopicSparseExtractor<Value_, Index_> > sparse (
172+ const bool row,
173+ tatami::VectorPtr<Index_> idx,
174+ const tatami::Options& opt
175+ ) const {
176+ return std::make_unique<ReversedIndicesExtractor<false , Value_, Index_> >(my_matrix->sparse (row, std::move (idx), opt), opt.sparse_ordered_index );
132177 }
133178
134179public:
135- std::unique_ptr<tatami::OracularDenseExtractor<Value_, Index_> > dense (bool row, std::shared_ptr<const tatami::Oracle<Index_> > ora, const tatami::Options& opt) const {
180+ std::unique_ptr<tatami::OracularDenseExtractor<Value_, Index_> > dense (
181+ const bool row,
182+ std::shared_ptr<const tatami::Oracle<Index_> > ora,
183+ const tatami::Options& opt
184+ ) const {
136185 return my_matrix->dense (row, std::move (ora), opt);
137186 }
138187
139- std::unique_ptr<tatami::OracularDenseExtractor<Value_, Index_> > dense (bool row, std::shared_ptr<const tatami::Oracle<Index_> > ora, Index_ bs, Index_ bl, const tatami::Options& opt) const {
188+ std::unique_ptr<tatami::OracularDenseExtractor<Value_, Index_> > dense (
189+ const bool row,
190+ std::shared_ptr<const tatami::Oracle<Index_> > ora,
191+ const Index_ bs,
192+ const Index_ bl,
193+ const tatami::Options& opt
194+ ) const {
140195 return my_matrix->dense (row, std::move (ora), bs, bl, opt);
141196 }
142197
143- std::unique_ptr<tatami::OracularDenseExtractor<Value_, Index_> > dense (bool row, std::shared_ptr<const tatami::Oracle<Index_> > ora, tatami::VectorPtr<Index_> idx, const tatami::Options& opt) const {
198+ std::unique_ptr<tatami::OracularDenseExtractor<Value_, Index_> > dense (
199+ const bool row,
200+ std::shared_ptr<const tatami::Oracle<Index_> > ora,
201+ tatami::VectorPtr<Index_> idx,
202+ const tatami::Options& opt
203+ ) const {
144204 return my_matrix->dense (row, std::move (ora), std::move (idx), opt);
145205 }
146206
147207public:
148- std::unique_ptr<tatami::OracularSparseExtractor<Value_, Index_> > sparse (bool row, std::shared_ptr<const tatami::Oracle<Index_> > ora, const tatami::Options& opt) const {
149- return std::make_unique<internal::ReversedIndicesExtractor<true , Value_, Index_> >(my_matrix->sparse (row, std::move (ora), opt), opt.sparse_ordered_index );
150- }
151-
152- std::unique_ptr<tatami::OracularSparseExtractor<Value_, Index_> > sparse (bool row, std::shared_ptr<const tatami::Oracle<Index_> > ora, Index_ bs, Index_ bl, const tatami::Options& opt) const {
153- return std::make_unique<internal::ReversedIndicesExtractor<true , Value_, Index_> >(my_matrix->sparse (row, std::move (ora), bs, bl, opt), opt.sparse_ordered_index );
154- }
155-
156- std::unique_ptr<tatami::OracularSparseExtractor<Value_, Index_> > sparse (bool row, std::shared_ptr<const tatami::Oracle<Index_> > ora, tatami::VectorPtr<Index_> idx, const tatami::Options& opt) const {
157- return std::make_unique<internal::ReversedIndicesExtractor<true , Value_, Index_> >(my_matrix->sparse (row, std::move (ora), std::move (idx), opt), opt.sparse_ordered_index );
208+ std::unique_ptr<tatami::OracularSparseExtractor<Value_, Index_> > sparse (
209+ const bool row,
210+ std::shared_ptr<const tatami::Oracle<Index_> > ora,
211+ const tatami::Options& opt
212+ ) const {
213+ return std::make_unique<ReversedIndicesExtractor<true , Value_, Index_> >(my_matrix->sparse (row, std::move (ora), opt), opt.sparse_ordered_index );
214+ }
215+
216+ std::unique_ptr<tatami::OracularSparseExtractor<Value_, Index_> > sparse (
217+ const bool row,
218+ std::shared_ptr<const tatami::Oracle<Index_> > ora,
219+ const Index_ bs,
220+ const Index_ bl,
221+ const tatami::Options& opt
222+ ) const {
223+ return std::make_unique<ReversedIndicesExtractor<true , Value_, Index_> >(my_matrix->sparse (row, std::move (ora), bs, bl, opt), opt.sparse_ordered_index );
224+ }
225+
226+ std::unique_ptr<tatami::OracularSparseExtractor<Value_, Index_> > sparse (
227+ const bool row,
228+ std::shared_ptr<const tatami::Oracle<Index_> > ora,
229+ tatami::VectorPtr<Index_> idx,
230+ const tatami::Options& opt
231+ ) const {
232+ return std::make_unique<ReversedIndicesExtractor<true , Value_, Index_> >(my_matrix->sparse (row, std::move (ora), std::move (idx), opt), opt.sparse_ordered_index );
158233 }
159234};
160235
0 commit comments