1#ifndef TATAMI_SPARSIFIED_WRAPPER_HPP
2#define TATAMI_SPARSIFIED_WRAPPER_HPP
29template<
bool oracle_,
typename Value_,
typename Index_>
40 my_dense(std::move(dense)),
42 my_needs_value(opt.sparse_extract_value),
43 my_needs_index(opt.sparse_extract_index)
55 output.
value = my_dense->fetch(i, value_buffer);
58 std::iota(index_buffer, index_buffer + my_extent,
static_cast<Index_
>(0));
59 output.
index = index_buffer;
65 std::unique_ptr<DenseExtractor<oracle_, Value_, Index_> > my_dense;
82template<
bool oracle_,
typename Value_,
typename Index_>
96 my_dense(std::move(dense)),
97 my_block_start(block_start),
98 my_block_length(block_length),
99 my_needs_value(opt.sparse_extract_value),
100 my_needs_index(opt.sparse_extract_index)
111 if (my_needs_value) {
112 output.
value = my_dense->fetch(i, value_buffer);
114 if (my_needs_index) {
115 std::iota(index_buffer, index_buffer + my_block_length, my_block_start);
116 output.
index = index_buffer;
122 std::unique_ptr<DenseExtractor<oracle_, Value_, Index_> > my_dense;
123 Index_ my_block_start, my_block_length;
139template<
bool oracle_,
typename Value_,
typename Index_>
151 my_dense(std::move(dense)),
152 my_indices_ptr(std::move(indices_ptr)),
153 my_needs_value(opt.sparse_extract_value),
154 my_needs_index(opt.sparse_extract_index)
164 const auto& ix = *my_indices_ptr;
166 if (my_needs_value) {
167 output.
value = my_dense->fetch(i, value_buffer);
169 if (my_needs_index) {
170 std::copy(ix.begin(), ix.end(), index_buffer);
171 output.
index = index_buffer;
177 std::unique_ptr<DenseExtractor<oracle_, Value_, Index_> > my_dense;
Store information about extracted sparse elements.
Wrap a block dense extractor in the sparse interface.
Definition SparsifiedWrapper.hpp:83
SparseRange< Value_, Index_ > fetch(Index_ i, Value_ *value_buffer, Index_ *index_buffer)
Definition SparsifiedWrapper.hpp:109
BlockSparsifiedWrapper(std::unique_ptr< DenseExtractor< oracle_, Value_, Index_ > > dense, Index_ block_start, Index_ block_length, const Options &opt)
Definition SparsifiedWrapper.hpp:95
Wrap a full dense extractor in the sparse interface.
Definition SparsifiedWrapper.hpp:30
FullSparsifiedWrapper(std::unique_ptr< DenseExtractor< oracle_, Value_, Index_ > > dense, Index_ extent, const Options &opt)
Definition SparsifiedWrapper.hpp:39
SparseRange< Value_, Index_ > fetch(Index_ i, Value_ *value_buffer, Index_ *index_buffer)
Definition SparsifiedWrapper.hpp:52
Wrap an indexed dense extractor in the sparse interface.
Definition SparsifiedWrapper.hpp:140
IndexSparsifiedWrapper(std::unique_ptr< DenseExtractor< oracle_, Value_, Index_ > > dense, VectorPtr< Index_ > indices_ptr, const Options &opt)
Definition SparsifiedWrapper.hpp:150
SparseRange< Value_, Index_ > fetch(Index_ i, Value_ *value_buffer, Index_ *index_buffer)
Definition SparsifiedWrapper.hpp:163
Flexible representations for matrix data.
Definition Extractor.hpp:15
std::shared_ptr< const std::vector< Index_ > > VectorPtr
Definition Matrix.hpp:26
typename std::conditional< oracle_, OracularSparseExtractor< Value_, Index_ >, MyopicSparseExtractor< Value_, Index_ > >::type SparseExtractor
Definition Extractor.hpp:284
typename std::conditional< oracle_, OracularDenseExtractor< Value_, Index_ >, MyopicDenseExtractor< Value_, Index_ > >::type DenseExtractor
Definition Extractor.hpp:273
Options for accessing data from a Matrix instance.
Definition Options.hpp:30
A range of a sparse vector.
Definition SparseRange.hpp:32
const Value_ * value
Definition SparseRange.hpp:56
const Index_ * index
Definition SparseRange.hpp:62