tatami
C++ API for different matrix representations
Loading...
Searching...
No Matches
Extractor.hpp
Go to the documentation of this file.
1#ifndef TATAMI_EXTRACTOR_HPP
2#define TATAMI_EXTRACTOR_HPP
3
4#include <vector>
5#include <type_traits>
6#include "SparseRange.hpp"
7#include "Options.hpp"
8
15namespace tatami {
16
23template<typename Value_, typename Index_>
25public:
44 virtual const Value_* fetch(Index_ i, Value_* buffer) = 0;
45
49 MyopicDenseExtractor() = default;
51 MyopicDenseExtractor& operator=(const MyopicDenseExtractor&) = default;
53 MyopicDenseExtractor& operator=(MyopicDenseExtractor&&) = default;
54 virtual ~MyopicDenseExtractor() = default;
62 // No-op for back-compatibility only.
63 template<class Oracle_>
64 void set_oracle(Oracle_) {}
68};
69
75template<typename Value_, typename Index_>
77public:
96 const Value_* fetch(Value_* buffer) {
97 return fetch(0, buffer);
98 }
99
117 virtual const Value_* fetch(Index_ i, Value_* buffer) = 0;
118
122 OracularDenseExtractor() = default;
124 OracularDenseExtractor& operator=(const OracularDenseExtractor&) = default;
126 OracularDenseExtractor& operator=(OracularDenseExtractor&&) = default;
127 virtual ~OracularDenseExtractor() = default;
135 // No-op for back-compatibility only.
136 template<class Oracle_>
137 void set_oracle(Oracle_) {}
141};
142
148template<typename Value_, typename Index_>
150public:
182 virtual SparseRange<Value_, Index_> fetch(Index_ i, Value_* value_buffer, Index_* index_buffer) = 0;
183
187 MyopicSparseExtractor() = default;
189 MyopicSparseExtractor& operator=(const MyopicSparseExtractor&) = default;
191 MyopicSparseExtractor& operator=(MyopicSparseExtractor&&) = default;
192 virtual ~MyopicSparseExtractor() = default;
200 // No-op for back-compatibility only.
201 template<class Oracle_>
202 void set_oracle(Oracle_) {}
206};
207
213template<typename Value_, typename Index_>
215public:
244 SparseRange<Value_, Index_> fetch(Value_* value_buffer, Index_* index_buffer) {
245 return fetch(0, value_buffer, index_buffer);
246 }
247
267 virtual SparseRange<Value_, Index_> fetch(Index_ i, Value_* value_buffer, Index_* index_buffer) = 0;
268
272 OracularSparseExtractor() = default;
274 OracularSparseExtractor& operator=(const OracularSparseExtractor&) = default;
276 OracularSparseExtractor& operator=(OracularSparseExtractor&&) = default;
277 virtual ~OracularSparseExtractor() = default;
285 // No-op for back-compatibility only.
286 template<class Oracle_>
287 void set_oracle(Oracle_) {}
291};
292
301template<bool oracle_, typename Value_, typename Index_>
302using DenseExtractor = typename std::conditional<oracle_, OracularDenseExtractor<Value_, Index_>, MyopicDenseExtractor<Value_, Index_> >::type;
303
312template<bool oracle_, typename Value_, typename Index_>
313using SparseExtractor = typename std::conditional<oracle_, OracularSparseExtractor<Value_, Index_>, MyopicSparseExtractor<Value_, Index_> >::type;
314
315}
316
317#endif
Options for data access.
Store information about extracted sparse elements.
Extract an element of the target dimension in dense form without an oracle.
Definition Extractor.hpp:24
virtual const Value_ * fetch(Index_ i, Value_ *buffer)=0
Extract an element of the target dimension in sparse form without an oracle.
Definition Extractor.hpp:149
virtual SparseRange< Value_, Index_ > fetch(Index_ i, Value_ *value_buffer, Index_ *index_buffer)=0
Extract an element of the target dimension in dense form with an oracle.
Definition Extractor.hpp:76
virtual const Value_ * fetch(Index_ i, Value_ *buffer)=0
const Value_ * fetch(Value_ *buffer)
Definition Extractor.hpp:96
Extract an element of the target dimension in sparse form with an oracle.
Definition Extractor.hpp:214
virtual SparseRange< Value_, Index_ > fetch(Index_ i, Value_ *value_buffer, Index_ *index_buffer)=0
SparseRange< Value_, Index_ > fetch(Value_ *value_buffer, Index_ *index_buffer)
Definition Extractor.hpp:244
Flexible representations for matrix data.
Definition Extractor.hpp:15
typename std::conditional< oracle_, OracularSparseExtractor< Value_, Index_ >, MyopicSparseExtractor< Value_, Index_ > >::type SparseExtractor
Definition Extractor.hpp:313
typename std::conditional< oracle_, OracularDenseExtractor< Value_, Index_ >, MyopicDenseExtractor< Value_, Index_ > >::type DenseExtractor
Definition Extractor.hpp:302
A range of a sparse vector.
Definition SparseRange.hpp:32