tatami_chunked
Helpers to create custom chunked tatami matrices
Loading...
Searching...
No Matches
DenseSlabFactory.hpp
Go to the documentation of this file.
1#ifndef TATAMI_CHUNKED_DENSE_SLAB_FACTORY_HPP
2#define TATAMI_CHUNKED_DENSE_SLAB_FACTORY_HPP
3
4#include "SlabCacheStats.hpp"
5#include "utils.hpp"
6
7#include <vector>
8#include <cstddef>
9
10#include "sanisizer/sanisizer.hpp"
11
17namespace tatami_chunked {
18
29template<typename Value_>
31public:
37 template<typename MaxSlabs_>
38 DenseSlabFactory(std::size_t slab_size, MaxSlabs_ max_slabs) :
39 my_slab_size(slab_size),
40 my_pool(sanisizer::product<I<decltype(my_pool.size())> >(max_slabs, slab_size))
41 {}
42
47 template<typename MaxSlabs_>
48 DenseSlabFactory(const SlabCacheStats<MaxSlabs_>& stats) : DenseSlabFactory(stats.slab_size_in_elements, stats.max_slabs_in_cache) {}
49
53 // Delete the copy constructors as we're passing out pointers.
54 DenseSlabFactory(const DenseSlabFactory&) = delete;
55 DenseSlabFactory& operator=(const DenseSlabFactory&) = delete;
56
57 // Move constructors are okay though.
59 DenseSlabFactory& operator=(DenseSlabFactory&&) = default;
64private:
65 // Might as well use size_t here, as we'll be doing pointer arithmetic in create().
66 std::size_t my_offset = 0, my_slab_size;
67 std::vector<Value_> my_pool;
68
69public:
73 struct Slab {
77 Value_* data = NULL;
78 };
79
87 Slab output;
88 output.data = my_pool.data() + my_offset;
89 my_offset += my_slab_size;
90 return output;
91 }
92};
93
94}
95
96#endif
Slab cache statistics.
Factory for dense slabs.
Definition DenseSlabFactory.hpp:30
DenseSlabFactory(std::size_t slab_size, MaxSlabs_ max_slabs)
Definition DenseSlabFactory.hpp:38
DenseSlabFactory(const SlabCacheStats< MaxSlabs_ > &stats)
Definition DenseSlabFactory.hpp:48
Slab create()
Definition DenseSlabFactory.hpp:86
Methods to handle chunked tatami matrices.
Definition ChunkDimensionStats.hpp:11
Dense slab.
Definition DenseSlabFactory.hpp:73
Value_ * data
Definition DenseSlabFactory.hpp:77
Statistics for slab caching.
Definition SlabCacheStats.hpp:26