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
6#include <vector>
7#include <cstddef>
8
9#include "sanisizer/sanisizer.hpp"
10
16namespace tatami_chunked {
17
28template<typename Value_>
30public:
36 template<typename MaxSlabs_>
37 DenseSlabFactory(std::size_t slab_size, MaxSlabs_ max_slabs) :
38 my_slab_size(slab_size),
39 my_pool(sanisizer::product<decltype(my_pool.size())>(max_slabs, slab_size))
40 {}
41
46 template<typename MaxSlabs_>
47 DenseSlabFactory(const SlabCacheStats<MaxSlabs_>& stats) : DenseSlabFactory(stats.slab_size_in_elements, stats.max_slabs_in_cache) {}
48
52 // Delete the copy constructors as we're passing out pointers.
53 DenseSlabFactory(const DenseSlabFactory&) = delete;
54 DenseSlabFactory& operator=(const DenseSlabFactory&) = delete;
55
56 // Move constructors are okay though.
58 DenseSlabFactory& operator=(DenseSlabFactory&&) = default;
63private:
64 // Might as well use size_t here, as we'll be doing pointer arithmetic in create().
65 std::size_t my_offset = 0, my_slab_size;
66 std::vector<Value_> my_pool;
67
68public:
72 struct Slab {
76 Value_* data = NULL;
77 };
78
86 Slab output;
87 output.data = my_pool.data() + my_offset;
88 my_offset += my_slab_size;
89 return output;
90 }
91};
92
93}
94
95#endif
Slab cache statistics.
Factory for dense slabs.
Definition DenseSlabFactory.hpp:29
DenseSlabFactory(std::size_t slab_size, MaxSlabs_ max_slabs)
Definition DenseSlabFactory.hpp:37
DenseSlabFactory(const SlabCacheStats< MaxSlabs_ > &stats)
Definition DenseSlabFactory.hpp:47
Slab create()
Definition DenseSlabFactory.hpp:85
Methods to handle chunked tatami matrices.
Definition ChunkDimensionStats.hpp:11
Dense slab.
Definition DenseSlabFactory.hpp:72
Value_ * data
Definition DenseSlabFactory.hpp:76
Statistics for slab caching.
Definition SlabCacheStats.hpp:26