1#ifndef TATAMI_CHUNKED_SPARSE_SLAB_FACTORY_HPP 
    2#define TATAMI_CHUNKED_SPARSE_SLAB_FACTORY_HPP 
    7#include "sanisizer/sanisizer.hpp" 
   32template<
typename Value_, 
typename Index_, 
typename Count_ = Index_>
 
   35    Index_ my_target_dim, my_non_target_dim;
 
   36    bool my_needs_value, my_needs_index;
 
   39    std::size_t my_slab_size;
 
   40    std::size_t my_offset_number = 0;
 
   41    std::size_t my_offset_slab = 0;
 
   43    std::vector<Value_> my_value_pool;
 
   44    std::vector<Index_> my_index_pool;
 
   45    std::vector<Count_> my_number_pool;
 
   60    template<
typename MaxSlabs_>
 
   61    SparseSlabFactory(Index_ target_dim, Index_ non_target_dim, std::size_t slab_size, MaxSlabs_ max_slabs, 
bool needs_value, 
bool needs_index) : 
 
   62        my_target_dim(target_dim),
 
   63        my_non_target_dim(non_target_dim),
 
   64        my_needs_value(needs_value),
 
   65        my_needs_index(needs_index),
 
   66        my_slab_size(slab_size),
 
   67        my_number_pool(sanisizer::product<decltype(my_number_pool.size())>(max_slabs, target_dim))
 
   70            my_value_pool.resize(sanisizer::product<
decltype(my_value_pool.size())>(max_slabs, slab_size));
 
   73            my_index_pool.resize(sanisizer::product<
decltype(my_index_pool.size())>(max_slabs, slab_size));
 
 
   88    template<
typename MaxSlabs_>
 
   89    SparseSlabFactory(Index_ target_dim, Index_ non_target_dim, MaxSlabs_ max_slabs, 
bool needs_value, 
bool needs_index) : 
 
   90        SparseSlabFactory(target_dim, non_target_dim, sanisizer::product<std::size_t>(target_dim, non_target_dim), max_slabs, needs_value, needs_index) {}
 
 
  103    template<
typename MaxSlabs_>
 
  105        SparseSlabFactory(target_dim, non_target_dim, stats.slab_size_in_elements, stats.max_slabs_in_cache, needs_value, needs_index) {}
 
 
  163        output.
number = my_number_pool.data() + my_offset_number;
 
  164        my_offset_number += my_target_dim;
 
  166        if (my_needs_value) {
 
  167            output.
values.reserve(my_target_dim);
 
  168            auto vptr = my_value_pool.data() + my_offset_slab;
 
  169            for (
decltype(my_target_dim) p = 0; p < my_target_dim; ++p, vptr += my_non_target_dim) {
 
  170                output.
values.push_back(vptr);
 
  174        if (my_needs_index) {
 
  175            output.
indices.reserve(my_target_dim);
 
  176            auto iptr = my_index_pool.data() + my_offset_slab;
 
  177            for (
decltype(my_target_dim) p = 0; p < my_target_dim; ++p, iptr += my_non_target_dim) {
 
  178                output.
indices.push_back(iptr);
 
  182        my_offset_slab += my_slab_size;
 
 
 
Factory for sparse slabs.
Definition SparseSlabFactory.hpp:33
Slab create()
Definition SparseSlabFactory.hpp:161
SparseSlabFactory(Index_ target_dim, Index_ non_target_dim, const SlabCacheStats< MaxSlabs_ > &stats, bool needs_value, bool needs_index)
Definition SparseSlabFactory.hpp:104
SparseSlabFactory(Index_ target_dim, Index_ non_target_dim, MaxSlabs_ max_slabs, bool needs_value, bool needs_index)
Definition SparseSlabFactory.hpp:89
SparseSlabFactory(Index_ target_dim, Index_ non_target_dim, std::size_t slab_size, MaxSlabs_ max_slabs, bool needs_value, bool needs_index)
Definition SparseSlabFactory.hpp:61
Methods to handle chunked tatami matrices.
Definition ChunkDimensionStats.hpp:11
Statistics for slab caching.
Definition SlabCacheStats.hpp:26
Sparse slab.
Definition SparseSlabFactory.hpp:125
std::vector< Index_ * > indices
Definition SparseSlabFactory.hpp:144
std::vector< Value_ * > values
Definition SparseSlabFactory.hpp:134
Count_ * number
Definition SparseSlabFactory.hpp:152